From 7148655e9af11705f843145101f70858813406b5 Mon Sep 17 00:00:00 2001
From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com>
Date: Wed, 23 May 2018 14:52:12 +0000
Subject: [PATCH] Support for multisell maintain ingredient.
---
.../dist/game/data/xsd/multisell.xsd | 3 ++-
.../gameserver/data/xml/impl/MultisellData.java | 3 ++-
.../model/holders/ItemChanceHolder.java | 16 ++++++++++++++++
.../network/clientpackets/MultiSellChoose.java | 5 +++++
.../dist/game/data/xsd/multisell.xsd | 3 ++-
.../gameserver/data/xml/impl/MultisellData.java | 3 ++-
.../model/holders/ItemChanceHolder.java | 16 ++++++++++++++++
.../network/clientpackets/MultiSellChoose.java | 5 +++++
.../dist/game/data/xsd/multisell.xsd | 3 ++-
.../gameserver/data/xml/impl/MultisellData.java | 3 ++-
.../model/holders/ItemChanceHolder.java | 16 ++++++++++++++++
.../network/clientpackets/MultiSellChoose.java | 5 +++++
.../dist/game/data/xsd/multisell.xsd | 3 ++-
.../gameserver/data/xml/impl/MultisellData.java | 3 ++-
.../model/holders/ItemChanceHolder.java | 16 ++++++++++++++++
.../network/clientpackets/MultiSellChoose.java | 5 +++++
.../dist/game/data/xsd/multisell.xsd | 3 ++-
.../gameserver/data/xml/impl/MultisellData.java | 3 ++-
.../model/holders/ItemChanceHolder.java | 16 ++++++++++++++++
.../network/clientpackets/MultiSellChoose.java | 5 +++++
.../dist/game/data/xsd/multisell.xsd | 3 ++-
.../gameserver/data/xml/impl/MultisellData.java | 3 ++-
.../model/holders/ItemChanceHolder.java | 16 ++++++++++++++++
.../network/clientpackets/MultiSellChoose.java | 5 +++++
.../dist/game/data/xsd/multisell.xsd | 3 ++-
.../gameserver/data/xml/impl/MultisellData.java | 3 ++-
.../model/holders/ItemChanceHolder.java | 16 ++++++++++++++++
.../network/clientpackets/MultiSellChoose.java | 5 +++++
28 files changed, 175 insertions(+), 14 deletions(-)
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/multisell.xsd b/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/multisell.xsd
index 99107d2612..68c1b4c24a 100644
--- a/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/multisell.xsd
+++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/multisell.xsd
@@ -20,8 +20,9 @@
-
+
+
diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java
index 47c82f06bc..695ba04572 100644
--- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java
+++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java
@@ -99,7 +99,8 @@ public final class MultisellData implements IGameXmlReader
final int id = parseInteger(d.getAttributes(), "id");
final long count = parseLong(d.getAttributes(), "count");
final byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0);
- final ItemChanceHolder ingredient = new ItemChanceHolder(id, 0, count, enchantmentLevel);
+ final Boolean maintainIngredient = parseBoolean(d.getAttributes(), "maintainIngredient", false);
+ final ItemChanceHolder ingredient = new ItemChanceHolder(id, 0, count, enchantmentLevel, maintainIngredient);
if (itemExists(ingredient))
{
diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java
index 1dcd82f4e6..3e504168fd 100644
--- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java
+++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java
@@ -29,6 +29,7 @@ public class ItemChanceHolder extends ItemHolder
{
private final double _chance;
private final byte _enchantmentLevel;
+ private final boolean _maintainIngredient;
public ItemChanceHolder(int id, double chance)
{
@@ -40,6 +41,7 @@ public class ItemChanceHolder extends ItemHolder
super(id, count);
_chance = chance;
_enchantmentLevel = 0;
+ _maintainIngredient = false;
}
public ItemChanceHolder(int id, double chance, long count, byte enchantmentLevel)
@@ -47,6 +49,15 @@ public class ItemChanceHolder extends ItemHolder
super(id, count);
_chance = chance;
_enchantmentLevel = enchantmentLevel;
+ _maintainIngredient = false;
+ }
+
+ public ItemChanceHolder(int id, double chance, long count, byte enchantmentLevel, boolean maintainIngredient)
+ {
+ super(id, count);
+ _chance = chance;
+ _enchantmentLevel = enchantmentLevel;
+ _maintainIngredient = maintainIngredient;
}
/**
@@ -67,6 +78,11 @@ public class ItemChanceHolder extends ItemHolder
return _enchantmentLevel;
}
+ public boolean isMaintainIngredient()
+ {
+ return _maintainIngredient;
+ }
+
/**
* Calculates a cumulative chance of all given holders. If all holders' chance sum up to 100% or above, there is 100% guarantee a holder will be selected.
* @param holders list of holders to calculate chance from.
diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java
index 467fda7228..9c3a8700c0 100644
--- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java
+++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java
@@ -288,6 +288,11 @@ public class MultiSellChoose implements IClientIncomingPacket
// Take all ingredients
for (ItemChanceHolder ingredient : entry.getIngredients())
{
+ if (ingredient.isMaintainIngredient())
+ {
+ continue;
+ }
+
final long totalCount = Math.multiplyExact(list.getIngredientCount(ingredient), _amount);
final SpecialItemType specialItem = SpecialItemType.getByClientId(ingredient.getId());
if (specialItem != null)
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/xsd/multisell.xsd b/L2J_Mobius_2.5_Underground/dist/game/data/xsd/multisell.xsd
index 99107d2612..68c1b4c24a 100644
--- a/L2J_Mobius_2.5_Underground/dist/game/data/xsd/multisell.xsd
+++ b/L2J_Mobius_2.5_Underground/dist/game/data/xsd/multisell.xsd
@@ -20,8 +20,9 @@
-
+
+
diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java
index 47c82f06bc..695ba04572 100644
--- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java
+++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java
@@ -99,7 +99,8 @@ public final class MultisellData implements IGameXmlReader
final int id = parseInteger(d.getAttributes(), "id");
final long count = parseLong(d.getAttributes(), "count");
final byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0);
- final ItemChanceHolder ingredient = new ItemChanceHolder(id, 0, count, enchantmentLevel);
+ final Boolean maintainIngredient = parseBoolean(d.getAttributes(), "maintainIngredient", false);
+ final ItemChanceHolder ingredient = new ItemChanceHolder(id, 0, count, enchantmentLevel, maintainIngredient);
if (itemExists(ingredient))
{
diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java
index 1dcd82f4e6..3e504168fd 100644
--- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java
+++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java
@@ -29,6 +29,7 @@ public class ItemChanceHolder extends ItemHolder
{
private final double _chance;
private final byte _enchantmentLevel;
+ private final boolean _maintainIngredient;
public ItemChanceHolder(int id, double chance)
{
@@ -40,6 +41,7 @@ public class ItemChanceHolder extends ItemHolder
super(id, count);
_chance = chance;
_enchantmentLevel = 0;
+ _maintainIngredient = false;
}
public ItemChanceHolder(int id, double chance, long count, byte enchantmentLevel)
@@ -47,6 +49,15 @@ public class ItemChanceHolder extends ItemHolder
super(id, count);
_chance = chance;
_enchantmentLevel = enchantmentLevel;
+ _maintainIngredient = false;
+ }
+
+ public ItemChanceHolder(int id, double chance, long count, byte enchantmentLevel, boolean maintainIngredient)
+ {
+ super(id, count);
+ _chance = chance;
+ _enchantmentLevel = enchantmentLevel;
+ _maintainIngredient = maintainIngredient;
}
/**
@@ -67,6 +78,11 @@ public class ItemChanceHolder extends ItemHolder
return _enchantmentLevel;
}
+ public boolean isMaintainIngredient()
+ {
+ return _maintainIngredient;
+ }
+
/**
* Calculates a cumulative chance of all given holders. If all holders' chance sum up to 100% or above, there is 100% guarantee a holder will be selected.
* @param holders list of holders to calculate chance from.
diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java
index e3a9140189..0450b7cd39 100644
--- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java
+++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java
@@ -316,6 +316,11 @@ public class MultiSellChoose implements IClientIncomingPacket
// Take all ingredients
for (ItemChanceHolder ingredient : entry.getIngredients())
{
+ if (ingredient.isMaintainIngredient())
+ {
+ continue;
+ }
+
final long totalCount = Math.multiplyExact(list.getIngredientCount(ingredient), _amount);
final SpecialItemType specialItem = SpecialItemType.getByClientId(ingredient.getId());
if (specialItem != null)
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/xsd/multisell.xsd b/L2J_Mobius_3.0_Helios/dist/game/data/xsd/multisell.xsd
index 99107d2612..68c1b4c24a 100644
--- a/L2J_Mobius_3.0_Helios/dist/game/data/xsd/multisell.xsd
+++ b/L2J_Mobius_3.0_Helios/dist/game/data/xsd/multisell.xsd
@@ -20,8 +20,9 @@
-
+
+
diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java
index 47c82f06bc..695ba04572 100644
--- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java
+++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java
@@ -99,7 +99,8 @@ public final class MultisellData implements IGameXmlReader
final int id = parseInteger(d.getAttributes(), "id");
final long count = parseLong(d.getAttributes(), "count");
final byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0);
- final ItemChanceHolder ingredient = new ItemChanceHolder(id, 0, count, enchantmentLevel);
+ final Boolean maintainIngredient = parseBoolean(d.getAttributes(), "maintainIngredient", false);
+ final ItemChanceHolder ingredient = new ItemChanceHolder(id, 0, count, enchantmentLevel, maintainIngredient);
if (itemExists(ingredient))
{
diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java
index 1dcd82f4e6..3e504168fd 100644
--- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java
+++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java
@@ -29,6 +29,7 @@ public class ItemChanceHolder extends ItemHolder
{
private final double _chance;
private final byte _enchantmentLevel;
+ private final boolean _maintainIngredient;
public ItemChanceHolder(int id, double chance)
{
@@ -40,6 +41,7 @@ public class ItemChanceHolder extends ItemHolder
super(id, count);
_chance = chance;
_enchantmentLevel = 0;
+ _maintainIngredient = false;
}
public ItemChanceHolder(int id, double chance, long count, byte enchantmentLevel)
@@ -47,6 +49,15 @@ public class ItemChanceHolder extends ItemHolder
super(id, count);
_chance = chance;
_enchantmentLevel = enchantmentLevel;
+ _maintainIngredient = false;
+ }
+
+ public ItemChanceHolder(int id, double chance, long count, byte enchantmentLevel, boolean maintainIngredient)
+ {
+ super(id, count);
+ _chance = chance;
+ _enchantmentLevel = enchantmentLevel;
+ _maintainIngredient = maintainIngredient;
}
/**
@@ -67,6 +78,11 @@ public class ItemChanceHolder extends ItemHolder
return _enchantmentLevel;
}
+ public boolean isMaintainIngredient()
+ {
+ return _maintainIngredient;
+ }
+
/**
* Calculates a cumulative chance of all given holders. If all holders' chance sum up to 100% or above, there is 100% guarantee a holder will be selected.
* @param holders list of holders to calculate chance from.
diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java
index e3a9140189..0450b7cd39 100644
--- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java
+++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java
@@ -316,6 +316,11 @@ public class MultiSellChoose implements IClientIncomingPacket
// Take all ingredients
for (ItemChanceHolder ingredient : entry.getIngredients())
{
+ if (ingredient.isMaintainIngredient())
+ {
+ continue;
+ }
+
final long totalCount = Math.multiplyExact(list.getIngredientCount(ingredient), _amount);
final SpecialItemType specialItem = SpecialItemType.getByClientId(ingredient.getId());
if (specialItem != null)
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/multisell.xsd b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/multisell.xsd
index 99107d2612..68c1b4c24a 100644
--- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/multisell.xsd
+++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/multisell.xsd
@@ -20,8 +20,9 @@
-
+
+
diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java
index 47c82f06bc..695ba04572 100644
--- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java
+++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java
@@ -99,7 +99,8 @@ public final class MultisellData implements IGameXmlReader
final int id = parseInteger(d.getAttributes(), "id");
final long count = parseLong(d.getAttributes(), "count");
final byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0);
- final ItemChanceHolder ingredient = new ItemChanceHolder(id, 0, count, enchantmentLevel);
+ final Boolean maintainIngredient = parseBoolean(d.getAttributes(), "maintainIngredient", false);
+ final ItemChanceHolder ingredient = new ItemChanceHolder(id, 0, count, enchantmentLevel, maintainIngredient);
if (itemExists(ingredient))
{
diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java
index 1dcd82f4e6..3e504168fd 100644
--- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java
+++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java
@@ -29,6 +29,7 @@ public class ItemChanceHolder extends ItemHolder
{
private final double _chance;
private final byte _enchantmentLevel;
+ private final boolean _maintainIngredient;
public ItemChanceHolder(int id, double chance)
{
@@ -40,6 +41,7 @@ public class ItemChanceHolder extends ItemHolder
super(id, count);
_chance = chance;
_enchantmentLevel = 0;
+ _maintainIngredient = false;
}
public ItemChanceHolder(int id, double chance, long count, byte enchantmentLevel)
@@ -47,6 +49,15 @@ public class ItemChanceHolder extends ItemHolder
super(id, count);
_chance = chance;
_enchantmentLevel = enchantmentLevel;
+ _maintainIngredient = false;
+ }
+
+ public ItemChanceHolder(int id, double chance, long count, byte enchantmentLevel, boolean maintainIngredient)
+ {
+ super(id, count);
+ _chance = chance;
+ _enchantmentLevel = enchantmentLevel;
+ _maintainIngredient = maintainIngredient;
}
/**
@@ -67,6 +78,11 @@ public class ItemChanceHolder extends ItemHolder
return _enchantmentLevel;
}
+ public boolean isMaintainIngredient()
+ {
+ return _maintainIngredient;
+ }
+
/**
* Calculates a cumulative chance of all given holders. If all holders' chance sum up to 100% or above, there is 100% guarantee a holder will be selected.
* @param holders list of holders to calculate chance from.
diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java
index e3a9140189..0450b7cd39 100644
--- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java
+++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java
@@ -316,6 +316,11 @@ public class MultiSellChoose implements IClientIncomingPacket
// Take all ingredients
for (ItemChanceHolder ingredient : entry.getIngredients())
{
+ if (ingredient.isMaintainIngredient())
+ {
+ continue;
+ }
+
final long totalCount = Math.multiplyExact(list.getIngredientCount(ingredient), _amount);
final SpecialItemType specialItem = SpecialItemType.getByClientId(ingredient.getId());
if (specialItem != null)
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/multisell.xsd b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/multisell.xsd
index 99107d2612..68c1b4c24a 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/multisell.xsd
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/multisell.xsd
@@ -20,8 +20,9 @@
-
+
+
diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java
index 47c82f06bc..695ba04572 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java
+++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java
@@ -99,7 +99,8 @@ public final class MultisellData implements IGameXmlReader
final int id = parseInteger(d.getAttributes(), "id");
final long count = parseLong(d.getAttributes(), "count");
final byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0);
- final ItemChanceHolder ingredient = new ItemChanceHolder(id, 0, count, enchantmentLevel);
+ final Boolean maintainIngredient = parseBoolean(d.getAttributes(), "maintainIngredient", false);
+ final ItemChanceHolder ingredient = new ItemChanceHolder(id, 0, count, enchantmentLevel, maintainIngredient);
if (itemExists(ingredient))
{
diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java
index 1dcd82f4e6..3e504168fd 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java
+++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java
@@ -29,6 +29,7 @@ public class ItemChanceHolder extends ItemHolder
{
private final double _chance;
private final byte _enchantmentLevel;
+ private final boolean _maintainIngredient;
public ItemChanceHolder(int id, double chance)
{
@@ -40,6 +41,7 @@ public class ItemChanceHolder extends ItemHolder
super(id, count);
_chance = chance;
_enchantmentLevel = 0;
+ _maintainIngredient = false;
}
public ItemChanceHolder(int id, double chance, long count, byte enchantmentLevel)
@@ -47,6 +49,15 @@ public class ItemChanceHolder extends ItemHolder
super(id, count);
_chance = chance;
_enchantmentLevel = enchantmentLevel;
+ _maintainIngredient = false;
+ }
+
+ public ItemChanceHolder(int id, double chance, long count, byte enchantmentLevel, boolean maintainIngredient)
+ {
+ super(id, count);
+ _chance = chance;
+ _enchantmentLevel = enchantmentLevel;
+ _maintainIngredient = maintainIngredient;
}
/**
@@ -67,6 +78,11 @@ public class ItemChanceHolder extends ItemHolder
return _enchantmentLevel;
}
+ public boolean isMaintainIngredient()
+ {
+ return _maintainIngredient;
+ }
+
/**
* Calculates a cumulative chance of all given holders. If all holders' chance sum up to 100% or above, there is 100% guarantee a holder will be selected.
* @param holders list of holders to calculate chance from.
diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java
index 29b4d8f81b..aa653c87eb 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java
+++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java
@@ -316,6 +316,11 @@ public class MultiSellChoose implements IClientIncomingPacket
// Take all ingredients
for (ItemChanceHolder ingredient : entry.getIngredients())
{
+ if (ingredient.isMaintainIngredient())
+ {
+ continue;
+ }
+
final long totalCount = Math.multiplyExact(list.getIngredientCount(ingredient), _amount);
final SpecialItemType specialItem = SpecialItemType.getByClientId(ingredient.getId());
if (specialItem != null)
diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/xsd/multisell.xsd b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/xsd/multisell.xsd
index 99107d2612..68c1b4c24a 100644
--- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/xsd/multisell.xsd
+++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/xsd/multisell.xsd
@@ -20,8 +20,9 @@
-
+
+
diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java b/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java
index 47c82f06bc..695ba04572 100644
--- a/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java
+++ b/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java
@@ -99,7 +99,8 @@ public final class MultisellData implements IGameXmlReader
final int id = parseInteger(d.getAttributes(), "id");
final long count = parseLong(d.getAttributes(), "count");
final byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0);
- final ItemChanceHolder ingredient = new ItemChanceHolder(id, 0, count, enchantmentLevel);
+ final Boolean maintainIngredient = parseBoolean(d.getAttributes(), "maintainIngredient", false);
+ final ItemChanceHolder ingredient = new ItemChanceHolder(id, 0, count, enchantmentLevel, maintainIngredient);
if (itemExists(ingredient))
{
diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java b/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java
index 1dcd82f4e6..3e504168fd 100644
--- a/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java
+++ b/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java
@@ -29,6 +29,7 @@ public class ItemChanceHolder extends ItemHolder
{
private final double _chance;
private final byte _enchantmentLevel;
+ private final boolean _maintainIngredient;
public ItemChanceHolder(int id, double chance)
{
@@ -40,6 +41,7 @@ public class ItemChanceHolder extends ItemHolder
super(id, count);
_chance = chance;
_enchantmentLevel = 0;
+ _maintainIngredient = false;
}
public ItemChanceHolder(int id, double chance, long count, byte enchantmentLevel)
@@ -47,6 +49,15 @@ public class ItemChanceHolder extends ItemHolder
super(id, count);
_chance = chance;
_enchantmentLevel = enchantmentLevel;
+ _maintainIngredient = false;
+ }
+
+ public ItemChanceHolder(int id, double chance, long count, byte enchantmentLevel, boolean maintainIngredient)
+ {
+ super(id, count);
+ _chance = chance;
+ _enchantmentLevel = enchantmentLevel;
+ _maintainIngredient = maintainIngredient;
}
/**
@@ -67,6 +78,11 @@ public class ItemChanceHolder extends ItemHolder
return _enchantmentLevel;
}
+ public boolean isMaintainIngredient()
+ {
+ return _maintainIngredient;
+ }
+
/**
* Calculates a cumulative chance of all given holders. If all holders' chance sum up to 100% or above, there is 100% guarantee a holder will be selected.
* @param holders list of holders to calculate chance from.
diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java b/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java
index 29b4d8f81b..aa653c87eb 100644
--- a/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java
+++ b/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java
@@ -316,6 +316,11 @@ public class MultiSellChoose implements IClientIncomingPacket
// Take all ingredients
for (ItemChanceHolder ingredient : entry.getIngredients())
{
+ if (ingredient.isMaintainIngredient())
+ {
+ continue;
+ }
+
final long totalCount = Math.multiplyExact(list.getIngredientCount(ingredient), _amount);
final SpecialItemType specialItem = SpecialItemType.getByClientId(ingredient.getId());
if (specialItem != null)
diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/xsd/multisell.xsd b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/xsd/multisell.xsd
index 99107d2612..68c1b4c24a 100644
--- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/xsd/multisell.xsd
+++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/xsd/multisell.xsd
@@ -20,8 +20,9 @@
-
+
+
diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java b/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java
index 47c82f06bc..695ba04572 100644
--- a/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java
+++ b/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java
@@ -99,7 +99,8 @@ public final class MultisellData implements IGameXmlReader
final int id = parseInteger(d.getAttributes(), "id");
final long count = parseLong(d.getAttributes(), "count");
final byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0);
- final ItemChanceHolder ingredient = new ItemChanceHolder(id, 0, count, enchantmentLevel);
+ final Boolean maintainIngredient = parseBoolean(d.getAttributes(), "maintainIngredient", false);
+ final ItemChanceHolder ingredient = new ItemChanceHolder(id, 0, count, enchantmentLevel, maintainIngredient);
if (itemExists(ingredient))
{
diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java b/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java
index 1dcd82f4e6..3e504168fd 100644
--- a/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java
+++ b/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java
@@ -29,6 +29,7 @@ public class ItemChanceHolder extends ItemHolder
{
private final double _chance;
private final byte _enchantmentLevel;
+ private final boolean _maintainIngredient;
public ItemChanceHolder(int id, double chance)
{
@@ -40,6 +41,7 @@ public class ItemChanceHolder extends ItemHolder
super(id, count);
_chance = chance;
_enchantmentLevel = 0;
+ _maintainIngredient = false;
}
public ItemChanceHolder(int id, double chance, long count, byte enchantmentLevel)
@@ -47,6 +49,15 @@ public class ItemChanceHolder extends ItemHolder
super(id, count);
_chance = chance;
_enchantmentLevel = enchantmentLevel;
+ _maintainIngredient = false;
+ }
+
+ public ItemChanceHolder(int id, double chance, long count, byte enchantmentLevel, boolean maintainIngredient)
+ {
+ super(id, count);
+ _chance = chance;
+ _enchantmentLevel = enchantmentLevel;
+ _maintainIngredient = maintainIngredient;
}
/**
@@ -67,6 +78,11 @@ public class ItemChanceHolder extends ItemHolder
return _enchantmentLevel;
}
+ public boolean isMaintainIngredient()
+ {
+ return _maintainIngredient;
+ }
+
/**
* Calculates a cumulative chance of all given holders. If all holders' chance sum up to 100% or above, there is 100% guarantee a holder will be selected.
* @param holders list of holders to calculate chance from.
diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java b/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java
index 29b4d8f81b..aa653c87eb 100644
--- a/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java
+++ b/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java
@@ -316,6 +316,11 @@ public class MultiSellChoose implements IClientIncomingPacket
// Take all ingredients
for (ItemChanceHolder ingredient : entry.getIngredients())
{
+ if (ingredient.isMaintainIngredient())
+ {
+ continue;
+ }
+
final long totalCount = Math.multiplyExact(list.getIngredientCount(ingredient), _amount);
final SpecialItemType specialItem = SpecialItemType.getByClientId(ingredient.getId());
if (specialItem != null)