From 71c43313f8e49c9f6dfd62f829405dc38b4376cc Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Mon, 19 Feb 2018 12:19:30 +0000 Subject: [PATCH] Private shop packet improvements. --- .../l2jmobius/gameserver/model/TradeItem.java | 44 +++++- .../RequestPrivateStoreSell.java | 45 +++--- .../clientpackets/SetPrivateStoreListBuy.java | 112 ++++++--------- .../SetPrivateStoreListSell.java | 13 +- .../l2jmobius/gameserver/model/TradeItem.java | 44 +++++- .../RequestPrivateStoreSell.java | 45 +++--- .../clientpackets/SetPrivateStoreListBuy.java | 131 +++++++++--------- .../SetPrivateStoreListSell.java | 13 +- .../l2jmobius/gameserver/model/TradeItem.java | 44 +++++- .../RequestPrivateStoreSell.java | 45 +++--- .../clientpackets/SetPrivateStoreListBuy.java | 112 ++++++--------- .../SetPrivateStoreListSell.java | 13 +- 12 files changed, 346 insertions(+), 315 deletions(-) diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/TradeItem.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/TradeItem.java index 1434df40eb..30226470eb 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/TradeItem.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/TradeItem.java @@ -36,8 +36,8 @@ public class TradeItem private long _count; private long _storeCount; private long _price; - private final byte _elemAtkType; - private final int _elemAtkPower; + private byte _elemAtkType; + private int _elemAtkPower; private final int[] _elemDefAttr = { 0, @@ -48,8 +48,8 @@ public class TradeItem 0 }; private final int[] _enchantOptions; - private final Collection _soulCrystalOptions; - private final Collection _soulCrystalSpecialOptions; + private Collection _soulCrystalOptions; + private Collection _soulCrystalSpecialOptions; private int _visualId; private int _augmentationOption1 = -1; private int _augmentationOption2 = -1; @@ -95,7 +95,7 @@ public class TradeItem _count = count; _storeCount = count; _price = price; - _elemAtkType = Elementals.NONE; + _elemAtkType = AttributeType.NONE.getClientId(); _elemAtkPower = 0; _enchantOptions = L2ItemInstance.DEFAULT_ENCHANT_OPTIONS; _soulCrystalOptions = Collections.emptyList(); @@ -191,16 +191,31 @@ public class TradeItem return _price; } + public void setAttackElementType(AttributeType attackElement) + { + _elemAtkType = attackElement.getClientId(); + } + public byte getAttackElementType() { return _elemAtkType; } + public void setAttackElementPower(int attackElementPower) + { + _elemAtkPower = attackElementPower; + } + public int getAttackElementPower() { return _elemAtkPower; } + public void setElementDefAttr(AttributeType element, int value) + { + _elemDefAttr[element.getClientId()] = value; + } + public int getElementDefAttr(byte i) { return _elemDefAttr[i]; @@ -211,14 +226,24 @@ public class TradeItem return _enchantOptions; } + public void setSoulCrystalOptions(Collection soulCrystalOptions) + { + _soulCrystalOptions = soulCrystalOptions; + } + public Collection getSoulCrystalOptions() { - return _soulCrystalOptions; + return _soulCrystalOptions == null ? Collections.emptyList() : _soulCrystalOptions; + } + + public void setSoulCrystalSpecialOptions(Collection soulCrystalSpecialOptions) + { + _soulCrystalSpecialOptions = soulCrystalSpecialOptions; } public Collection getSoulCrystalSpecialOptions() { - return _soulCrystalSpecialOptions; + return _soulCrystalSpecialOptions == null ? Collections.emptyList() : _soulCrystalSpecialOptions; } public void setAugmentation(int option1, int option2) @@ -237,6 +262,11 @@ public class TradeItem return _augmentationOption2; } + public void setVisualId(int visualItemId) + { + _visualId = visualItemId; + } + public int getVisualId() { return _visualId; diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestPrivateStoreSell.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestPrivateStoreSell.java index 4bdeb34604..d61109b205 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestPrivateStoreSell.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestPrivateStoreSell.java @@ -40,45 +40,40 @@ public final class RequestPrivateStoreSell implements IClientIncomingPacket public boolean read(L2GameClient client, PacketReader packet) { _storePlayerId = packet.readD(); - final int count = packet.readD(); - if ((count <= 0) || (count > Config.MAX_ITEM_IN_PACKET)) + int itemsCount = packet.readD(); + if ((itemsCount <= 0) || (itemsCount > Config.MAX_ITEM_IN_PACKET)) { return false; } - _items = new ItemRequest[count]; + _items = new ItemRequest[itemsCount]; - for (int i = 0; i < count; i++) + for (int i = 0; i < itemsCount; i++) { - final int objectId = packet.readD(); + final int slot = packet.readD(); final int itemId = packet.readD(); - @SuppressWarnings("unused") - final int enchantLevel = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int nameExists = packet.readH(); // TODO: use this - final long cnt = packet.readQ(); + packet.readH(); // TODO analyse this + packet.readH(); // TODO analyse this + final long count = packet.readQ(); final long price = packet.readQ(); - @SuppressWarnings("unused") - final int augmentationEffect1 = packet.readD(); // TODO: use this - @SuppressWarnings("unused") - final int augmentationEffect2 = packet.readD(); // TODO: use this - @SuppressWarnings("unused") - final int visualId = packet.readD(); // TODO: use this - final int primarySpecialAbilities = packet.readC(); - for (int a = 0; a < primarySpecialAbilities; a++) + packet.readD(); // visual id + packet.readD(); // option 1 + packet.readD(); // option 2 + int soulCrystals = packet.readC(); + for (int s = 0; s < soulCrystals; s++) + { + packet.readD(); // soul crystal option + } + int soulCrystals2 = packet.readC(); + for (int s = 0; s < soulCrystals2; s++) { packet.readD(); // sa effect } - final int secondarySpecialAbilities = packet.readC(); - for (int a = 0; a < secondarySpecialAbilities; a++) - { - packet.readD(); // sa effect - } - if (/* (objectId < 1) || */ (itemId < 1) || (cnt < 1) || (price < 0)) + if (/* (slot < 1) || */ (itemId < 1) || (count < 1) || (price < 0)) { _items = null; return false; } - _items[i] = new ItemRequest(objectId, itemId, cnt, price); + _items[i] = new ItemRequest(slot, itemId, count, price); } return true; } diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/SetPrivateStoreListBuy.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/SetPrivateStoreListBuy.java index ea2fcb07bc..037da6bf54 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/SetPrivateStoreListBuy.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/SetPrivateStoreListBuy.java @@ -20,9 +20,13 @@ import static com.l2jmobius.gameserver.model.itemcontainer.Inventory.MAX_ADENA; import com.l2jmobius.Config; import com.l2jmobius.commons.network.PacketReader; +import com.l2jmobius.gameserver.datatables.ItemTable; +import com.l2jmobius.gameserver.enums.AttributeType; import com.l2jmobius.gameserver.enums.PrivateStoreType; +import com.l2jmobius.gameserver.model.TradeItem; import com.l2jmobius.gameserver.model.TradeList; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; +import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.model.zone.ZoneId; import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.SystemMessageId; @@ -34,7 +38,7 @@ import com.l2jmobius.gameserver.util.Util; public final class SetPrivateStoreListBuy implements IClientIncomingPacket { - private Item[] _items = null; + private TradeItem[] _items = null; @Override public boolean read(L2GameClient client, PacketReader packet) @@ -45,18 +49,23 @@ public final class SetPrivateStoreListBuy implements IClientIncomingPacket return false; } - _items = new Item[count]; + _items = new TradeItem[count]; for (int i = 0; i < count; i++) { - final int itemId = packet.readD(); + int itemId = packet.readD(); - @SuppressWarnings("unused") - final int enchantLevel = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int nameExists = packet.readH(); // TODO: use this + final L2Item template = ItemTable.getInstance().getTemplate(itemId); + if (template == null) + { + _items = null; + return false; + } - final long cnt = packet.readQ(); - final long price = packet.readQ(); + final int enchantLevel = packet.readH(); + packet.readH(); // TODO analyse this + + long cnt = packet.readQ(); + long price = packet.readQ(); if ((itemId < 1) || (cnt < 1) || (price < 0)) { @@ -64,30 +73,29 @@ public final class SetPrivateStoreListBuy implements IClientIncomingPacket return false; } - @SuppressWarnings("unused") - final int augmentationEffect1 = packet.readD(); // TODO: use this - @SuppressWarnings("unused") - final int augmentationEffect2 = packet.readD(); // TODO: use this - @SuppressWarnings("unused") - final int attackElement = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int attackElementPower = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int fireDefense = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int waterDefense = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int windDefense = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int earthDefense = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int holyDefense = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int darkDefense = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int visualId = packet.readD(); // TODO: use this + final int option1 = packet.readD(); + final int option2 = packet.readD(); + final short attackAttributeId = (short) packet.readH(); + final int attackAttributeValue = packet.readH(); + final int defenceFire = packet.readH(); + final int defenceWater = packet.readH(); + final int defenceWind = packet.readH(); + final int defenceEarth = packet.readH(); + final int defenceHoly = packet.readH(); + final int defenceDark = packet.readH(); - _items[i] = new Item(itemId, cnt, price); + final TradeItem item = new TradeItem(template, cnt, price); + item.setEnchant(enchantLevel); + item.setAugmentation(option1, option2); + item.setAttackElementType(AttributeType.findByClientId(attackAttributeId)); + item.setAttackElementPower(attackAttributeValue); + item.setElementDefAttr(AttributeType.FIRE, defenceFire); + item.setElementDefAttr(AttributeType.WATER, defenceWater); + item.setElementDefAttr(AttributeType.WIND, defenceWind); + item.setElementDefAttr(AttributeType.EARTH, defenceEarth); + item.setElementDefAttr(AttributeType.HOLY, defenceHoly); + item.setElementDefAttr(AttributeType.DARK, defenceDark); + _items[i] = item; } return true; } @@ -130,7 +138,7 @@ public final class SetPrivateStoreListBuy implements IClientIncomingPacket return; } - final TradeList tradeList = player.getBuyList(); + TradeList tradeList = player.getBuyList(); tradeList.clear(); // Check maximum number of allowed slots for pvt shops @@ -142,15 +150,17 @@ public final class SetPrivateStoreListBuy implements IClientIncomingPacket } long totalCost = 0; - for (Item i : _items) + for (TradeItem i : _items) { - if (!i.addToTradeList(tradeList)) + if ((MAX_ADENA / i.getCount()) < i.getPrice()) { Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " tried to set price more than " + MAX_ADENA + " adena in Private Store - Buy.", Config.DEFAULT_PUNISH); return; } - totalCost += i.getCost(); + tradeList.addItemByItemId(i.getItem().getId(), i.getCount(), i.getPrice()); + + totalCost += (i.getCount() * i.getPrice()); if (totalCost > MAX_ADENA) { Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " tried to set total price more than " + MAX_ADENA + " adena in Private Store - Buy.", Config.DEFAULT_PUNISH); @@ -171,34 +181,4 @@ public final class SetPrivateStoreListBuy implements IClientIncomingPacket player.broadcastUserInfo(); player.broadcastPacket(new PrivateStoreMsgBuy(player)); } - - private static class Item - { - private final int _itemId; - private final long _count; - private final long _price; - - public Item(int id, long num, long pri) - { - _itemId = id; - _count = num; - _price = pri; - } - - public boolean addToTradeList(TradeList list) - { - if ((MAX_ADENA / _count) < _price) - { - return false; - } - - list.addItemByItemId(_itemId, _count, _price); - return true; - } - - public long getCost() - { - return _count * _price; - } - } } diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/SetPrivateStoreListSell.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/SetPrivateStoreListSell.java index 3929a77565..4fe7585a2e 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/SetPrivateStoreListSell.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/SetPrivateStoreListSell.java @@ -163,15 +163,15 @@ public class SetPrivateStoreListSell implements IClientIncomingPacket private static class Item { - private final int _itemId; + private final int _objectId; private final long _count; private final long _price; - public Item(int id, long num, long pri) + public Item(int objectId, long count, long price) { - _itemId = id; - _count = num; - _price = pri; + _objectId = objectId; + _count = count; + _price = price; } public boolean addToTradeList(TradeList list) @@ -181,7 +181,7 @@ public class SetPrivateStoreListSell implements IClientIncomingPacket return false; } - list.addItem(_itemId, _count, _price); + list.addItem(_objectId, _count, _price); return true; } @@ -190,5 +190,4 @@ public class SetPrivateStoreListSell implements IClientIncomingPacket return _count * _price; } } - } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/TradeItem.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/TradeItem.java index 1434df40eb..30226470eb 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/TradeItem.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/TradeItem.java @@ -36,8 +36,8 @@ public class TradeItem private long _count; private long _storeCount; private long _price; - private final byte _elemAtkType; - private final int _elemAtkPower; + private byte _elemAtkType; + private int _elemAtkPower; private final int[] _elemDefAttr = { 0, @@ -48,8 +48,8 @@ public class TradeItem 0 }; private final int[] _enchantOptions; - private final Collection _soulCrystalOptions; - private final Collection _soulCrystalSpecialOptions; + private Collection _soulCrystalOptions; + private Collection _soulCrystalSpecialOptions; private int _visualId; private int _augmentationOption1 = -1; private int _augmentationOption2 = -1; @@ -95,7 +95,7 @@ public class TradeItem _count = count; _storeCount = count; _price = price; - _elemAtkType = Elementals.NONE; + _elemAtkType = AttributeType.NONE.getClientId(); _elemAtkPower = 0; _enchantOptions = L2ItemInstance.DEFAULT_ENCHANT_OPTIONS; _soulCrystalOptions = Collections.emptyList(); @@ -191,16 +191,31 @@ public class TradeItem return _price; } + public void setAttackElementType(AttributeType attackElement) + { + _elemAtkType = attackElement.getClientId(); + } + public byte getAttackElementType() { return _elemAtkType; } + public void setAttackElementPower(int attackElementPower) + { + _elemAtkPower = attackElementPower; + } + public int getAttackElementPower() { return _elemAtkPower; } + public void setElementDefAttr(AttributeType element, int value) + { + _elemDefAttr[element.getClientId()] = value; + } + public int getElementDefAttr(byte i) { return _elemDefAttr[i]; @@ -211,14 +226,24 @@ public class TradeItem return _enchantOptions; } + public void setSoulCrystalOptions(Collection soulCrystalOptions) + { + _soulCrystalOptions = soulCrystalOptions; + } + public Collection getSoulCrystalOptions() { - return _soulCrystalOptions; + return _soulCrystalOptions == null ? Collections.emptyList() : _soulCrystalOptions; + } + + public void setSoulCrystalSpecialOptions(Collection soulCrystalSpecialOptions) + { + _soulCrystalSpecialOptions = soulCrystalSpecialOptions; } public Collection getSoulCrystalSpecialOptions() { - return _soulCrystalSpecialOptions; + return _soulCrystalSpecialOptions == null ? Collections.emptyList() : _soulCrystalSpecialOptions; } public void setAugmentation(int option1, int option2) @@ -237,6 +262,11 @@ public class TradeItem return _augmentationOption2; } + public void setVisualId(int visualItemId) + { + _visualId = visualItemId; + } + public int getVisualId() { return _visualId; diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestPrivateStoreSell.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestPrivateStoreSell.java index 4bdeb34604..d61109b205 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestPrivateStoreSell.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestPrivateStoreSell.java @@ -40,45 +40,40 @@ public final class RequestPrivateStoreSell implements IClientIncomingPacket public boolean read(L2GameClient client, PacketReader packet) { _storePlayerId = packet.readD(); - final int count = packet.readD(); - if ((count <= 0) || (count > Config.MAX_ITEM_IN_PACKET)) + int itemsCount = packet.readD(); + if ((itemsCount <= 0) || (itemsCount > Config.MAX_ITEM_IN_PACKET)) { return false; } - _items = new ItemRequest[count]; + _items = new ItemRequest[itemsCount]; - for (int i = 0; i < count; i++) + for (int i = 0; i < itemsCount; i++) { - final int objectId = packet.readD(); + final int slot = packet.readD(); final int itemId = packet.readD(); - @SuppressWarnings("unused") - final int enchantLevel = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int nameExists = packet.readH(); // TODO: use this - final long cnt = packet.readQ(); + packet.readH(); // TODO analyse this + packet.readH(); // TODO analyse this + final long count = packet.readQ(); final long price = packet.readQ(); - @SuppressWarnings("unused") - final int augmentationEffect1 = packet.readD(); // TODO: use this - @SuppressWarnings("unused") - final int augmentationEffect2 = packet.readD(); // TODO: use this - @SuppressWarnings("unused") - final int visualId = packet.readD(); // TODO: use this - final int primarySpecialAbilities = packet.readC(); - for (int a = 0; a < primarySpecialAbilities; a++) + packet.readD(); // visual id + packet.readD(); // option 1 + packet.readD(); // option 2 + int soulCrystals = packet.readC(); + for (int s = 0; s < soulCrystals; s++) + { + packet.readD(); // soul crystal option + } + int soulCrystals2 = packet.readC(); + for (int s = 0; s < soulCrystals2; s++) { packet.readD(); // sa effect } - final int secondarySpecialAbilities = packet.readC(); - for (int a = 0; a < secondarySpecialAbilities; a++) - { - packet.readD(); // sa effect - } - if (/* (objectId < 1) || */ (itemId < 1) || (cnt < 1) || (price < 0)) + if (/* (slot < 1) || */ (itemId < 1) || (count < 1) || (price < 0)) { _items = null; return false; } - _items[i] = new ItemRequest(objectId, itemId, cnt, price); + _items[i] = new ItemRequest(slot, itemId, count, price); } return true; } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/SetPrivateStoreListBuy.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/SetPrivateStoreListBuy.java index ea2fcb07bc..712d599e7d 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/SetPrivateStoreListBuy.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/SetPrivateStoreListBuy.java @@ -18,11 +18,19 @@ package com.l2jmobius.gameserver.network.clientpackets; import static com.l2jmobius.gameserver.model.itemcontainer.Inventory.MAX_ADENA; +import java.util.Arrays; + import com.l2jmobius.Config; import com.l2jmobius.commons.network.PacketReader; +import com.l2jmobius.gameserver.data.xml.impl.EnsoulData; +import com.l2jmobius.gameserver.datatables.ItemTable; +import com.l2jmobius.gameserver.enums.AttributeType; import com.l2jmobius.gameserver.enums.PrivateStoreType; +import com.l2jmobius.gameserver.model.TradeItem; import com.l2jmobius.gameserver.model.TradeList; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; +import com.l2jmobius.gameserver.model.ensoul.EnsoulOption; +import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.model.zone.ZoneId; import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.SystemMessageId; @@ -34,7 +42,7 @@ import com.l2jmobius.gameserver.util.Util; public final class SetPrivateStoreListBuy implements IClientIncomingPacket { - private Item[] _items = null; + private TradeItem[] _items = null; @Override public boolean read(L2GameClient client, PacketReader packet) @@ -45,18 +53,23 @@ public final class SetPrivateStoreListBuy implements IClientIncomingPacket return false; } - _items = new Item[count]; + _items = new TradeItem[count]; for (int i = 0; i < count; i++) { - final int itemId = packet.readD(); + int itemId = packet.readD(); - @SuppressWarnings("unused") - final int enchantLevel = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int nameExists = packet.readH(); // TODO: use this + final L2Item template = ItemTable.getInstance().getTemplate(itemId); + if (template == null) + { + _items = null; + return false; + } - final long cnt = packet.readQ(); - final long price = packet.readQ(); + final int enchantLevel = packet.readH(); + packet.readH(); // TODO analyse this + + long cnt = packet.readQ(); + long price = packet.readQ(); if ((itemId < 1) || (cnt < 1) || (price < 0)) { @@ -64,30 +77,44 @@ public final class SetPrivateStoreListBuy implements IClientIncomingPacket return false; } - @SuppressWarnings("unused") - final int augmentationEffect1 = packet.readD(); // TODO: use this - @SuppressWarnings("unused") - final int augmentationEffect2 = packet.readD(); // TODO: use this - @SuppressWarnings("unused") - final int attackElement = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int attackElementPower = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int fireDefense = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int waterDefense = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int windDefense = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int earthDefense = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int holyDefense = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int darkDefense = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int visualId = packet.readD(); // TODO: use this + final int option1 = packet.readD(); + final int option2 = packet.readD(); + final short attackAttributeId = (short) packet.readH(); + final int attackAttributeValue = packet.readH(); + final int defenceFire = packet.readH(); + final int defenceWater = packet.readH(); + final int defenceWind = packet.readH(); + final int defenceEarth = packet.readH(); + final int defenceHoly = packet.readH(); + final int defenceDark = packet.readH(); + final int visualId = packet.readD(); - _items[i] = new Item(itemId, cnt, price); + final EnsoulOption[] soulCrystalOptions = new EnsoulOption[packet.readC()]; + for (int k = 0; k < soulCrystalOptions.length; k++) + { + soulCrystalOptions[k] = EnsoulData.getInstance().getOption(packet.readD()); + } + final EnsoulOption[] soulCrystalSpecialOptions = new EnsoulOption[packet.readC()]; + for (int k = 0; k < soulCrystalSpecialOptions.length; k++) + { + soulCrystalSpecialOptions[k] = EnsoulData.getInstance().getOption(packet.readD()); + } + + final TradeItem item = new TradeItem(template, cnt, price); + item.setEnchant(enchantLevel); + item.setAugmentation(option1, option2); + item.setAttackElementType(AttributeType.findByClientId(attackAttributeId)); + item.setAttackElementPower(attackAttributeValue); + item.setElementDefAttr(AttributeType.FIRE, defenceFire); + item.setElementDefAttr(AttributeType.WATER, defenceWater); + item.setElementDefAttr(AttributeType.WIND, defenceWind); + item.setElementDefAttr(AttributeType.EARTH, defenceEarth); + item.setElementDefAttr(AttributeType.HOLY, defenceHoly); + item.setElementDefAttr(AttributeType.DARK, defenceDark); + item.setVisualId(visualId); + item.setSoulCrystalOptions(Arrays.asList(soulCrystalOptions)); + item.setSoulCrystalSpecialOptions(Arrays.asList(soulCrystalSpecialOptions)); + _items[i] = item; } return true; } @@ -130,7 +157,7 @@ public final class SetPrivateStoreListBuy implements IClientIncomingPacket return; } - final TradeList tradeList = player.getBuyList(); + TradeList tradeList = player.getBuyList(); tradeList.clear(); // Check maximum number of allowed slots for pvt shops @@ -142,15 +169,17 @@ public final class SetPrivateStoreListBuy implements IClientIncomingPacket } long totalCost = 0; - for (Item i : _items) + for (TradeItem i : _items) { - if (!i.addToTradeList(tradeList)) + if ((MAX_ADENA / i.getCount()) < i.getPrice()) { Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " tried to set price more than " + MAX_ADENA + " adena in Private Store - Buy.", Config.DEFAULT_PUNISH); return; } - totalCost += i.getCost(); + tradeList.addItemByItemId(i.getItem().getId(), i.getCount(), i.getPrice()); + + totalCost += (i.getCount() * i.getPrice()); if (totalCost > MAX_ADENA) { Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " tried to set total price more than " + MAX_ADENA + " adena in Private Store - Buy.", Config.DEFAULT_PUNISH); @@ -171,34 +200,4 @@ public final class SetPrivateStoreListBuy implements IClientIncomingPacket player.broadcastUserInfo(); player.broadcastPacket(new PrivateStoreMsgBuy(player)); } - - private static class Item - { - private final int _itemId; - private final long _count; - private final long _price; - - public Item(int id, long num, long pri) - { - _itemId = id; - _count = num; - _price = pri; - } - - public boolean addToTradeList(TradeList list) - { - if ((MAX_ADENA / _count) < _price) - { - return false; - } - - list.addItemByItemId(_itemId, _count, _price); - return true; - } - - public long getCost() - { - return _count * _price; - } - } } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/SetPrivateStoreListSell.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/SetPrivateStoreListSell.java index 3929a77565..4fe7585a2e 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/SetPrivateStoreListSell.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/SetPrivateStoreListSell.java @@ -163,15 +163,15 @@ public class SetPrivateStoreListSell implements IClientIncomingPacket private static class Item { - private final int _itemId; + private final int _objectId; private final long _count; private final long _price; - public Item(int id, long num, long pri) + public Item(int objectId, long count, long price) { - _itemId = id; - _count = num; - _price = pri; + _objectId = objectId; + _count = count; + _price = price; } public boolean addToTradeList(TradeList list) @@ -181,7 +181,7 @@ public class SetPrivateStoreListSell implements IClientIncomingPacket return false; } - list.addItem(_itemId, _count, _price); + list.addItem(_objectId, _count, _price); return true; } @@ -190,5 +190,4 @@ public class SetPrivateStoreListSell implements IClientIncomingPacket return _count * _price; } } - } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/TradeItem.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/TradeItem.java index 1434df40eb..30226470eb 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/TradeItem.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/TradeItem.java @@ -36,8 +36,8 @@ public class TradeItem private long _count; private long _storeCount; private long _price; - private final byte _elemAtkType; - private final int _elemAtkPower; + private byte _elemAtkType; + private int _elemAtkPower; private final int[] _elemDefAttr = { 0, @@ -48,8 +48,8 @@ public class TradeItem 0 }; private final int[] _enchantOptions; - private final Collection _soulCrystalOptions; - private final Collection _soulCrystalSpecialOptions; + private Collection _soulCrystalOptions; + private Collection _soulCrystalSpecialOptions; private int _visualId; private int _augmentationOption1 = -1; private int _augmentationOption2 = -1; @@ -95,7 +95,7 @@ public class TradeItem _count = count; _storeCount = count; _price = price; - _elemAtkType = Elementals.NONE; + _elemAtkType = AttributeType.NONE.getClientId(); _elemAtkPower = 0; _enchantOptions = L2ItemInstance.DEFAULT_ENCHANT_OPTIONS; _soulCrystalOptions = Collections.emptyList(); @@ -191,16 +191,31 @@ public class TradeItem return _price; } + public void setAttackElementType(AttributeType attackElement) + { + _elemAtkType = attackElement.getClientId(); + } + public byte getAttackElementType() { return _elemAtkType; } + public void setAttackElementPower(int attackElementPower) + { + _elemAtkPower = attackElementPower; + } + public int getAttackElementPower() { return _elemAtkPower; } + public void setElementDefAttr(AttributeType element, int value) + { + _elemDefAttr[element.getClientId()] = value; + } + public int getElementDefAttr(byte i) { return _elemDefAttr[i]; @@ -211,14 +226,24 @@ public class TradeItem return _enchantOptions; } + public void setSoulCrystalOptions(Collection soulCrystalOptions) + { + _soulCrystalOptions = soulCrystalOptions; + } + public Collection getSoulCrystalOptions() { - return _soulCrystalOptions; + return _soulCrystalOptions == null ? Collections.emptyList() : _soulCrystalOptions; + } + + public void setSoulCrystalSpecialOptions(Collection soulCrystalSpecialOptions) + { + _soulCrystalSpecialOptions = soulCrystalSpecialOptions; } public Collection getSoulCrystalSpecialOptions() { - return _soulCrystalSpecialOptions; + return _soulCrystalSpecialOptions == null ? Collections.emptyList() : _soulCrystalSpecialOptions; } public void setAugmentation(int option1, int option2) @@ -237,6 +262,11 @@ public class TradeItem return _augmentationOption2; } + public void setVisualId(int visualItemId) + { + _visualId = visualItemId; + } + public int getVisualId() { return _visualId; diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestPrivateStoreSell.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestPrivateStoreSell.java index 4bdeb34604..d61109b205 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestPrivateStoreSell.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestPrivateStoreSell.java @@ -40,45 +40,40 @@ public final class RequestPrivateStoreSell implements IClientIncomingPacket public boolean read(L2GameClient client, PacketReader packet) { _storePlayerId = packet.readD(); - final int count = packet.readD(); - if ((count <= 0) || (count > Config.MAX_ITEM_IN_PACKET)) + int itemsCount = packet.readD(); + if ((itemsCount <= 0) || (itemsCount > Config.MAX_ITEM_IN_PACKET)) { return false; } - _items = new ItemRequest[count]; + _items = new ItemRequest[itemsCount]; - for (int i = 0; i < count; i++) + for (int i = 0; i < itemsCount; i++) { - final int objectId = packet.readD(); + final int slot = packet.readD(); final int itemId = packet.readD(); - @SuppressWarnings("unused") - final int enchantLevel = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int nameExists = packet.readH(); // TODO: use this - final long cnt = packet.readQ(); + packet.readH(); // TODO analyse this + packet.readH(); // TODO analyse this + final long count = packet.readQ(); final long price = packet.readQ(); - @SuppressWarnings("unused") - final int augmentationEffect1 = packet.readD(); // TODO: use this - @SuppressWarnings("unused") - final int augmentationEffect2 = packet.readD(); // TODO: use this - @SuppressWarnings("unused") - final int visualId = packet.readD(); // TODO: use this - final int primarySpecialAbilities = packet.readC(); - for (int a = 0; a < primarySpecialAbilities; a++) + packet.readD(); // visual id + packet.readD(); // option 1 + packet.readD(); // option 2 + int soulCrystals = packet.readC(); + for (int s = 0; s < soulCrystals; s++) + { + packet.readD(); // soul crystal option + } + int soulCrystals2 = packet.readC(); + for (int s = 0; s < soulCrystals2; s++) { packet.readD(); // sa effect } - final int secondarySpecialAbilities = packet.readC(); - for (int a = 0; a < secondarySpecialAbilities; a++) - { - packet.readD(); // sa effect - } - if (/* (objectId < 1) || */ (itemId < 1) || (cnt < 1) || (price < 0)) + if (/* (slot < 1) || */ (itemId < 1) || (count < 1) || (price < 0)) { _items = null; return false; } - _items[i] = new ItemRequest(objectId, itemId, cnt, price); + _items[i] = new ItemRequest(slot, itemId, count, price); } return true; } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/SetPrivateStoreListBuy.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/SetPrivateStoreListBuy.java index ea2fcb07bc..037da6bf54 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/SetPrivateStoreListBuy.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/SetPrivateStoreListBuy.java @@ -20,9 +20,13 @@ import static com.l2jmobius.gameserver.model.itemcontainer.Inventory.MAX_ADENA; import com.l2jmobius.Config; import com.l2jmobius.commons.network.PacketReader; +import com.l2jmobius.gameserver.datatables.ItemTable; +import com.l2jmobius.gameserver.enums.AttributeType; import com.l2jmobius.gameserver.enums.PrivateStoreType; +import com.l2jmobius.gameserver.model.TradeItem; import com.l2jmobius.gameserver.model.TradeList; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; +import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.model.zone.ZoneId; import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.SystemMessageId; @@ -34,7 +38,7 @@ import com.l2jmobius.gameserver.util.Util; public final class SetPrivateStoreListBuy implements IClientIncomingPacket { - private Item[] _items = null; + private TradeItem[] _items = null; @Override public boolean read(L2GameClient client, PacketReader packet) @@ -45,18 +49,23 @@ public final class SetPrivateStoreListBuy implements IClientIncomingPacket return false; } - _items = new Item[count]; + _items = new TradeItem[count]; for (int i = 0; i < count; i++) { - final int itemId = packet.readD(); + int itemId = packet.readD(); - @SuppressWarnings("unused") - final int enchantLevel = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int nameExists = packet.readH(); // TODO: use this + final L2Item template = ItemTable.getInstance().getTemplate(itemId); + if (template == null) + { + _items = null; + return false; + } - final long cnt = packet.readQ(); - final long price = packet.readQ(); + final int enchantLevel = packet.readH(); + packet.readH(); // TODO analyse this + + long cnt = packet.readQ(); + long price = packet.readQ(); if ((itemId < 1) || (cnt < 1) || (price < 0)) { @@ -64,30 +73,29 @@ public final class SetPrivateStoreListBuy implements IClientIncomingPacket return false; } - @SuppressWarnings("unused") - final int augmentationEffect1 = packet.readD(); // TODO: use this - @SuppressWarnings("unused") - final int augmentationEffect2 = packet.readD(); // TODO: use this - @SuppressWarnings("unused") - final int attackElement = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int attackElementPower = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int fireDefense = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int waterDefense = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int windDefense = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int earthDefense = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int holyDefense = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int darkDefense = packet.readH(); // TODO: use this - @SuppressWarnings("unused") - final int visualId = packet.readD(); // TODO: use this + final int option1 = packet.readD(); + final int option2 = packet.readD(); + final short attackAttributeId = (short) packet.readH(); + final int attackAttributeValue = packet.readH(); + final int defenceFire = packet.readH(); + final int defenceWater = packet.readH(); + final int defenceWind = packet.readH(); + final int defenceEarth = packet.readH(); + final int defenceHoly = packet.readH(); + final int defenceDark = packet.readH(); - _items[i] = new Item(itemId, cnt, price); + final TradeItem item = new TradeItem(template, cnt, price); + item.setEnchant(enchantLevel); + item.setAugmentation(option1, option2); + item.setAttackElementType(AttributeType.findByClientId(attackAttributeId)); + item.setAttackElementPower(attackAttributeValue); + item.setElementDefAttr(AttributeType.FIRE, defenceFire); + item.setElementDefAttr(AttributeType.WATER, defenceWater); + item.setElementDefAttr(AttributeType.WIND, defenceWind); + item.setElementDefAttr(AttributeType.EARTH, defenceEarth); + item.setElementDefAttr(AttributeType.HOLY, defenceHoly); + item.setElementDefAttr(AttributeType.DARK, defenceDark); + _items[i] = item; } return true; } @@ -130,7 +138,7 @@ public final class SetPrivateStoreListBuy implements IClientIncomingPacket return; } - final TradeList tradeList = player.getBuyList(); + TradeList tradeList = player.getBuyList(); tradeList.clear(); // Check maximum number of allowed slots for pvt shops @@ -142,15 +150,17 @@ public final class SetPrivateStoreListBuy implements IClientIncomingPacket } long totalCost = 0; - for (Item i : _items) + for (TradeItem i : _items) { - if (!i.addToTradeList(tradeList)) + if ((MAX_ADENA / i.getCount()) < i.getPrice()) { Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " tried to set price more than " + MAX_ADENA + " adena in Private Store - Buy.", Config.DEFAULT_PUNISH); return; } - totalCost += i.getCost(); + tradeList.addItemByItemId(i.getItem().getId(), i.getCount(), i.getPrice()); + + totalCost += (i.getCount() * i.getPrice()); if (totalCost > MAX_ADENA) { Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " tried to set total price more than " + MAX_ADENA + " adena in Private Store - Buy.", Config.DEFAULT_PUNISH); @@ -171,34 +181,4 @@ public final class SetPrivateStoreListBuy implements IClientIncomingPacket player.broadcastUserInfo(); player.broadcastPacket(new PrivateStoreMsgBuy(player)); } - - private static class Item - { - private final int _itemId; - private final long _count; - private final long _price; - - public Item(int id, long num, long pri) - { - _itemId = id; - _count = num; - _price = pri; - } - - public boolean addToTradeList(TradeList list) - { - if ((MAX_ADENA / _count) < _price) - { - return false; - } - - list.addItemByItemId(_itemId, _count, _price); - return true; - } - - public long getCost() - { - return _count * _price; - } - } } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/SetPrivateStoreListSell.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/SetPrivateStoreListSell.java index 3929a77565..4fe7585a2e 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/SetPrivateStoreListSell.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/SetPrivateStoreListSell.java @@ -163,15 +163,15 @@ public class SetPrivateStoreListSell implements IClientIncomingPacket private static class Item { - private final int _itemId; + private final int _objectId; private final long _count; private final long _price; - public Item(int id, long num, long pri) + public Item(int objectId, long count, long price) { - _itemId = id; - _count = num; - _price = pri; + _objectId = objectId; + _count = count; + _price = price; } public boolean addToTradeList(TradeList list) @@ -181,7 +181,7 @@ public class SetPrivateStoreListSell implements IClientIncomingPacket return false; } - list.addItem(_itemId, _count, _price); + list.addItem(_objectId, _count, _price); return true; } @@ -190,5 +190,4 @@ public class SetPrivateStoreListSell implements IClientIncomingPacket return _count * _price; } } - }