From 1289171727164439eb38473be3ab15caed02068d Mon Sep 17 00:00:00 2001
From: mobius <8391001+MobiusDevelopment@users.noreply.github.com>
Date: Sat, 31 Jan 2015 22:49:02 +0000
Subject: [PATCH] Enchantment level support for multisells.
---
trunk/dist/game/data/multisell/documentation.txt | 6 ++++--
trunk/dist/game/data/xsd/multisell.xsd | 2 ++
.../gameserver/model/multisell/Ingredient.java | 10 ++++++----
.../gameserver/model/multisell/PreparedEntry.java | 2 +-
.../network/clientpackets/MultiSellChoose.java | 6 +++---
.../network/serverpackets/MultiSellList.java | 4 ++--
6 files changed, 18 insertions(+), 12 deletions(-)
diff --git a/trunk/dist/game/data/multisell/documentation.txt b/trunk/dist/game/data/multisell/documentation.txt
index 2678009f1c..94b227ad1e 100644
--- a/trunk/dist/game/data/multisell/documentation.txt
+++ b/trunk/dist/game/data/multisell/documentation.txt
@@ -37,7 +37,9 @@ TAGS:
: start and end the list
: start and end a single entry within the list
: add a product for the entry
- : add an ingredient for the entry.
+ : add an ingredient for the entry
+enchantmentLevel : add item enchantment level
+
Sample:
@@ -48,7 +50,7 @@ Sample:
-
-
+
\ No newline at end of file
diff --git a/trunk/dist/game/data/xsd/multisell.xsd b/trunk/dist/game/data/xsd/multisell.xsd
index 96a02ace7a..ebc2c8dbda 100644
--- a/trunk/dist/game/data/xsd/multisell.xsd
+++ b/trunk/dist/game/data/xsd/multisell.xsd
@@ -23,6 +23,7 @@
+
@@ -30,6 +31,7 @@
+
diff --git a/trunk/java/com/l2jserver/gameserver/model/multisell/Ingredient.java b/trunk/java/com/l2jserver/gameserver/model/multisell/Ingredient.java
index 20b076a572..696b1f329a 100644
--- a/trunk/java/com/l2jserver/gameserver/model/multisell/Ingredient.java
+++ b/trunk/java/com/l2jserver/gameserver/model/multisell/Ingredient.java
@@ -32,6 +32,7 @@ public class Ingredient
{
private int _itemId;
private long _itemCount;
+ private final int _enchantmentLevel;
private boolean _isTaxIngredient;
private boolean _maintainIngredient;
private L2Item _template = null;
@@ -40,13 +41,14 @@ public class Ingredient
public Ingredient(StatsSet set)
{
- this(set.getInt("id"), set.getLong("count"), set.getInt("chance", 0), set.getBoolean("isTaxIngredient", false), set.getBoolean("maintainIngredient", false));
+ this(set.getInt("id"), set.getLong("count"), set.getInt("enchantmentLevel", 0), set.getInt("chance", 0), set.getBoolean("isTaxIngredient", false), set.getBoolean("maintainIngredient", false));
}
- public Ingredient(int itemId, long itemCount, int chance, boolean isTaxIngredient, boolean maintainIngredient)
+ public Ingredient(int itemId, long itemCount, int enchantmentLevel, int chance, boolean isTaxIngredient, boolean maintainIngredient)
{
_itemId = itemId;
_itemCount = itemCount;
+ _enchantmentLevel = enchantmentLevel;
_chance = chance;
_isTaxIngredient = isTaxIngredient;
_maintainIngredient = maintainIngredient;
@@ -61,7 +63,7 @@ public class Ingredient
*/
public Ingredient getCopy()
{
- return new Ingredient(_itemId, _itemCount, _chance, _isTaxIngredient, _maintainIngredient);
+ return new Ingredient(_itemId, _itemCount, _enchantmentLevel, _chance, _isTaxIngredient, _maintainIngredient);
}
public final L2Item getTemplate()
@@ -86,7 +88,7 @@ public class Ingredient
public final int getEnchantLevel()
{
- return _itemInfo != null ? _itemInfo.getEnchantLevel() : 0;
+ return _itemInfo == null ? _enchantmentLevel : _itemInfo.getEnchantLevel();
}
public final void setItemId(int itemId)
diff --git a/trunk/java/com/l2jserver/gameserver/model/multisell/PreparedEntry.java b/trunk/java/com/l2jserver/gameserver/model/multisell/PreparedEntry.java
index c3b1702545..7cb3615b63 100644
--- a/trunk/java/com/l2jserver/gameserver/model/multisell/PreparedEntry.java
+++ b/trunk/java/com/l2jserver/gameserver/model/multisell/PreparedEntry.java
@@ -81,7 +81,7 @@ public class PreparedEntry extends Entry
adenaAmount += _taxAmount; // do not forget tax
if (adenaAmount > 0)
{
- _ingredients.add(new Ingredient(ADENA_ID, adenaAmount, 0, false, false));
+ _ingredients.add(new Ingredient(ADENA_ID, adenaAmount, 0, 0, false, false));
}
// now copy products
diff --git a/trunk/java/com/l2jserver/gameserver/network/clientpackets/MultiSellChoose.java b/trunk/java/com/l2jserver/gameserver/network/clientpackets/MultiSellChoose.java
index 5c2414f2b6..c52b95b303 100644
--- a/trunk/java/com/l2jserver/gameserver/network/clientpackets/MultiSellChoose.java
+++ b/trunk/java/com/l2jserver/gameserver/network/clientpackets/MultiSellChoose.java
@@ -205,7 +205,7 @@ public class MultiSellChoose extends L2GameClientPacket
// if this is not a list that maintains enchantment, check the count of all items that have the given id.
// otherwise, check only the count of items with exactly the needed enchantment level
final long required = ((Config.ALT_BLACKSMITH_USE_RECIPES || !e.getMaintainIngredient()) ? (e.getItemCount() * _amount) : e.getItemCount());
- if (inv.getInventoryItemCount(e.getItemId(), list.getMaintainEnchantment() ? e.getEnchantLevel() : -1, false) < required)
+ if (inv.getInventoryItemCount(e.getItemId(), (list.getMaintainEnchantment() || (e.getEnchantLevel() > 0)) ? e.getEnchantLevel() : -1, false) < required)
{
SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_S2_S1_S);
sm.addItemName(e.getTemplate());
@@ -267,7 +267,7 @@ public class MultiSellChoose extends L2GameClientPacket
// b) list does not maintain enchantment: get the instances with the LOWEST enchantment level
// a) if enchantment is maintained, then get a list of items that exactly match this enchantment
- if (list.getMaintainEnchantment())
+ if (list.getMaintainEnchantment() || (e.getEnchantLevel() > 0))
{
// loop through this list and remove (one by one) each item until the required amount is taken.
L2ItemInstance[] inventoryContents = inv.getAllItemsByItemId(e.getItemId(), e.getEnchantLevel(), false);
@@ -400,7 +400,7 @@ public class MultiSellChoose extends L2GameClientPacket
for (int i = 0; i < (e.getItemCount() * _amount); i++)
{
product = inv.addItem("Multisell", e.getItemId(), 1, player, player.getTarget());
- if ((product != null) && list.getMaintainEnchantment())
+ if ((product != null) && (list.getMaintainEnchantment() || (e.getEnchantLevel() > 0)))
{
if (i < augmentation.size())
{
diff --git a/trunk/java/com/l2jserver/gameserver/network/serverpackets/MultiSellList.java b/trunk/java/com/l2jserver/gameserver/network/serverpackets/MultiSellList.java
index 6cb2b47fa7..8d37d13e87 100644
--- a/trunk/java/com/l2jserver/gameserver/network/serverpackets/MultiSellList.java
+++ b/trunk/java/com/l2jserver/gameserver/network/serverpackets/MultiSellList.java
@@ -110,7 +110,7 @@ public final class MultiSellList extends L2GameServerPacket
}
else
{
- writeH(0x00); // enchant level
+ writeH(ing.getEnchantLevel()); // enchant level
writeD(ing.getChance()); // augment id
writeD(0x00); // mana
writeD(0x00); // time ?
@@ -146,7 +146,7 @@ public final class MultiSellList extends L2GameServerPacket
}
else
{
- writeH(0x00); // enchant level
+ writeH(ing.getEnchantLevel()); // enchant level
writeD(ing.getChance()); // augment id
writeD(0x00); // mana
writeH(0x00); // attack element