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)