diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java index 8548c7b8f8..a505ef0c43 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java @@ -44,6 +44,7 @@ import org.l2jmobius.gameserver.model.holders.MultisellEntryHolder; import org.l2jmobius.gameserver.model.holders.MultisellListHolder; import org.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; import org.l2jmobius.gameserver.model.items.Item; +import org.l2jmobius.gameserver.model.items.enchant.EnchantItemGroup; import org.l2jmobius.gameserver.network.serverpackets.MultiSellList; public final class MultisellData implements IXmlReader @@ -117,7 +118,54 @@ public final class MultisellData implements IXmlReader final int id = parseInteger(d.getAttributes(), "id"); final long count = parseLong(d.getAttributes(), "count"); final double chance = parseDouble(d.getAttributes(), "chance", Double.NaN); - final byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0); + byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0); + + if (enchantmentLevel > 0) + { + final Item item = ItemTable.getInstance().getTemplate(id); + if (item != null) + { + if (item.isWeapon()) + { + if (item.isMagicWeapon()) + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("MAGE_WEAPON_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + else + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("FIGHTER_WEAPON_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + } + else if (item.isArmor()) + { + if (item.getBodyPart() == Item.SLOT_FULL_ARMOR) + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("FULL_ARMOR_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + else + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("ARMOR_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + } + } + } + final ItemChanceHolder product = new ItemChanceHolder(id, chance, count, enchantmentLevel); if (itemExists(product)) diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java index 6209f573bd..a1a6fdd194 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java @@ -31,6 +31,7 @@ public final class EnchantItemGroup private static final Logger LOGGER = Logger.getLogger(EnchantItemGroup.class.getName()); private final List _chances = new ArrayList<>(); private final String _name; + private int _maximumEnchant = -1; public EnchantItemGroup(String name) { @@ -74,4 +75,23 @@ public final class EnchantItemGroup LOGGER.warning(getClass().getSimpleName() + ": item group: " + _name + " doesn't have any chances!"); return -1; } + + /** + * @return the maximum enchant level for current enchant item group. + */ + public int getMaximumEnchant() + { + if (_maximumEnchant == -1) + { + for (RangeChanceHolder holder : _chances) + { + if ((holder.getChance() > 0) && (holder.getMax() > _maximumEnchant)) + { + _maximumEnchant = holder.getMax(); + } + } + _maximumEnchant++; + } + return _maximumEnchant; + } } diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java index 8548c7b8f8..a505ef0c43 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java @@ -44,6 +44,7 @@ import org.l2jmobius.gameserver.model.holders.MultisellEntryHolder; import org.l2jmobius.gameserver.model.holders.MultisellListHolder; import org.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; import org.l2jmobius.gameserver.model.items.Item; +import org.l2jmobius.gameserver.model.items.enchant.EnchantItemGroup; import org.l2jmobius.gameserver.network.serverpackets.MultiSellList; public final class MultisellData implements IXmlReader @@ -117,7 +118,54 @@ public final class MultisellData implements IXmlReader final int id = parseInteger(d.getAttributes(), "id"); final long count = parseLong(d.getAttributes(), "count"); final double chance = parseDouble(d.getAttributes(), "chance", Double.NaN); - final byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0); + byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0); + + if (enchantmentLevel > 0) + { + final Item item = ItemTable.getInstance().getTemplate(id); + if (item != null) + { + if (item.isWeapon()) + { + if (item.isMagicWeapon()) + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("MAGE_WEAPON_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + else + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("FIGHTER_WEAPON_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + } + else if (item.isArmor()) + { + if (item.getBodyPart() == Item.SLOT_FULL_ARMOR) + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("FULL_ARMOR_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + else + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("ARMOR_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + } + } + } + final ItemChanceHolder product = new ItemChanceHolder(id, chance, count, enchantmentLevel); if (itemExists(product)) diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java index 6209f573bd..a1a6fdd194 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java @@ -31,6 +31,7 @@ public final class EnchantItemGroup private static final Logger LOGGER = Logger.getLogger(EnchantItemGroup.class.getName()); private final List _chances = new ArrayList<>(); private final String _name; + private int _maximumEnchant = -1; public EnchantItemGroup(String name) { @@ -74,4 +75,23 @@ public final class EnchantItemGroup LOGGER.warning(getClass().getSimpleName() + ": item group: " + _name + " doesn't have any chances!"); return -1; } + + /** + * @return the maximum enchant level for current enchant item group. + */ + public int getMaximumEnchant() + { + if (_maximumEnchant == -1) + { + for (RangeChanceHolder holder : _chances) + { + if ((holder.getChance() > 0) && (holder.getMax() > _maximumEnchant)) + { + _maximumEnchant = holder.getMax(); + } + } + _maximumEnchant++; + } + return _maximumEnchant; + } } diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java index 8548c7b8f8..a505ef0c43 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java @@ -44,6 +44,7 @@ import org.l2jmobius.gameserver.model.holders.MultisellEntryHolder; import org.l2jmobius.gameserver.model.holders.MultisellListHolder; import org.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; import org.l2jmobius.gameserver.model.items.Item; +import org.l2jmobius.gameserver.model.items.enchant.EnchantItemGroup; import org.l2jmobius.gameserver.network.serverpackets.MultiSellList; public final class MultisellData implements IXmlReader @@ -117,7 +118,54 @@ public final class MultisellData implements IXmlReader final int id = parseInteger(d.getAttributes(), "id"); final long count = parseLong(d.getAttributes(), "count"); final double chance = parseDouble(d.getAttributes(), "chance", Double.NaN); - final byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0); + byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0); + + if (enchantmentLevel > 0) + { + final Item item = ItemTable.getInstance().getTemplate(id); + if (item != null) + { + if (item.isWeapon()) + { + if (item.isMagicWeapon()) + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("MAGE_WEAPON_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + else + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("FIGHTER_WEAPON_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + } + else if (item.isArmor()) + { + if (item.getBodyPart() == Item.SLOT_FULL_ARMOR) + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("FULL_ARMOR_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + else + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("ARMOR_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + } + } + } + final ItemChanceHolder product = new ItemChanceHolder(id, chance, count, enchantmentLevel); if (itemExists(product)) diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java index 6209f573bd..a1a6fdd194 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java @@ -31,6 +31,7 @@ public final class EnchantItemGroup private static final Logger LOGGER = Logger.getLogger(EnchantItemGroup.class.getName()); private final List _chances = new ArrayList<>(); private final String _name; + private int _maximumEnchant = -1; public EnchantItemGroup(String name) { @@ -74,4 +75,23 @@ public final class EnchantItemGroup LOGGER.warning(getClass().getSimpleName() + ": item group: " + _name + " doesn't have any chances!"); return -1; } + + /** + * @return the maximum enchant level for current enchant item group. + */ + public int getMaximumEnchant() + { + if (_maximumEnchant == -1) + { + for (RangeChanceHolder holder : _chances) + { + if ((holder.getChance() > 0) && (holder.getMax() > _maximumEnchant)) + { + _maximumEnchant = holder.getMax(); + } + } + _maximumEnchant++; + } + return _maximumEnchant; + } } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java index 8548c7b8f8..a505ef0c43 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java @@ -44,6 +44,7 @@ import org.l2jmobius.gameserver.model.holders.MultisellEntryHolder; import org.l2jmobius.gameserver.model.holders.MultisellListHolder; import org.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; import org.l2jmobius.gameserver.model.items.Item; +import org.l2jmobius.gameserver.model.items.enchant.EnchantItemGroup; import org.l2jmobius.gameserver.network.serverpackets.MultiSellList; public final class MultisellData implements IXmlReader @@ -117,7 +118,54 @@ public final class MultisellData implements IXmlReader final int id = parseInteger(d.getAttributes(), "id"); final long count = parseLong(d.getAttributes(), "count"); final double chance = parseDouble(d.getAttributes(), "chance", Double.NaN); - final byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0); + byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0); + + if (enchantmentLevel > 0) + { + final Item item = ItemTable.getInstance().getTemplate(id); + if (item != null) + { + if (item.isWeapon()) + { + if (item.isMagicWeapon()) + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("MAGE_WEAPON_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + else + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("FIGHTER_WEAPON_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + } + else if (item.isArmor()) + { + if (item.getBodyPart() == Item.SLOT_FULL_ARMOR) + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("FULL_ARMOR_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + else + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("ARMOR_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + } + } + } + final ItemChanceHolder product = new ItemChanceHolder(id, chance, count, enchantmentLevel); if (itemExists(product)) diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java index 6209f573bd..a1a6fdd194 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java @@ -31,6 +31,7 @@ public final class EnchantItemGroup private static final Logger LOGGER = Logger.getLogger(EnchantItemGroup.class.getName()); private final List _chances = new ArrayList<>(); private final String _name; + private int _maximumEnchant = -1; public EnchantItemGroup(String name) { @@ -74,4 +75,23 @@ public final class EnchantItemGroup LOGGER.warning(getClass().getSimpleName() + ": item group: " + _name + " doesn't have any chances!"); return -1; } + + /** + * @return the maximum enchant level for current enchant item group. + */ + public int getMaximumEnchant() + { + if (_maximumEnchant == -1) + { + for (RangeChanceHolder holder : _chances) + { + if ((holder.getChance() > 0) && (holder.getMax() > _maximumEnchant)) + { + _maximumEnchant = holder.getMax(); + } + } + _maximumEnchant++; + } + return _maximumEnchant; + } } diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java index 8548c7b8f8..a505ef0c43 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java @@ -44,6 +44,7 @@ import org.l2jmobius.gameserver.model.holders.MultisellEntryHolder; import org.l2jmobius.gameserver.model.holders.MultisellListHolder; import org.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; import org.l2jmobius.gameserver.model.items.Item; +import org.l2jmobius.gameserver.model.items.enchant.EnchantItemGroup; import org.l2jmobius.gameserver.network.serverpackets.MultiSellList; public final class MultisellData implements IXmlReader @@ -117,7 +118,54 @@ public final class MultisellData implements IXmlReader final int id = parseInteger(d.getAttributes(), "id"); final long count = parseLong(d.getAttributes(), "count"); final double chance = parseDouble(d.getAttributes(), "chance", Double.NaN); - final byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0); + byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0); + + if (enchantmentLevel > 0) + { + final Item item = ItemTable.getInstance().getTemplate(id); + if (item != null) + { + if (item.isWeapon()) + { + if (item.isMagicWeapon()) + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("MAGE_WEAPON_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + else + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("FIGHTER_WEAPON_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + } + else if (item.isArmor()) + { + if (item.getBodyPart() == Item.SLOT_FULL_ARMOR) + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("FULL_ARMOR_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + else + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("ARMOR_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + } + } + } + final ItemChanceHolder product = new ItemChanceHolder(id, chance, count, enchantmentLevel); if (itemExists(product)) diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java index 6209f573bd..a1a6fdd194 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java @@ -31,6 +31,7 @@ public final class EnchantItemGroup private static final Logger LOGGER = Logger.getLogger(EnchantItemGroup.class.getName()); private final List _chances = new ArrayList<>(); private final String _name; + private int _maximumEnchant = -1; public EnchantItemGroup(String name) { @@ -74,4 +75,23 @@ public final class EnchantItemGroup LOGGER.warning(getClass().getSimpleName() + ": item group: " + _name + " doesn't have any chances!"); return -1; } + + /** + * @return the maximum enchant level for current enchant item group. + */ + public int getMaximumEnchant() + { + if (_maximumEnchant == -1) + { + for (RangeChanceHolder holder : _chances) + { + if ((holder.getChance() > 0) && (holder.getMax() > _maximumEnchant)) + { + _maximumEnchant = holder.getMax(); + } + } + _maximumEnchant++; + } + return _maximumEnchant; + } } diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java index 8548c7b8f8..a505ef0c43 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java @@ -44,6 +44,7 @@ import org.l2jmobius.gameserver.model.holders.MultisellEntryHolder; import org.l2jmobius.gameserver.model.holders.MultisellListHolder; import org.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; import org.l2jmobius.gameserver.model.items.Item; +import org.l2jmobius.gameserver.model.items.enchant.EnchantItemGroup; import org.l2jmobius.gameserver.network.serverpackets.MultiSellList; public final class MultisellData implements IXmlReader @@ -117,7 +118,54 @@ public final class MultisellData implements IXmlReader final int id = parseInteger(d.getAttributes(), "id"); final long count = parseLong(d.getAttributes(), "count"); final double chance = parseDouble(d.getAttributes(), "chance", Double.NaN); - final byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0); + byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0); + + if (enchantmentLevel > 0) + { + final Item item = ItemTable.getInstance().getTemplate(id); + if (item != null) + { + if (item.isWeapon()) + { + if (item.isMagicWeapon()) + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("MAGE_WEAPON_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + else + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("FIGHTER_WEAPON_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + } + else if (item.isArmor()) + { + if (item.getBodyPart() == Item.SLOT_FULL_ARMOR) + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("FULL_ARMOR_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + else + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("ARMOR_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + } + } + } + final ItemChanceHolder product = new ItemChanceHolder(id, chance, count, enchantmentLevel); if (itemExists(product)) diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java index 6209f573bd..a1a6fdd194 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java @@ -31,6 +31,7 @@ public final class EnchantItemGroup private static final Logger LOGGER = Logger.getLogger(EnchantItemGroup.class.getName()); private final List _chances = new ArrayList<>(); private final String _name; + private int _maximumEnchant = -1; public EnchantItemGroup(String name) { @@ -74,4 +75,23 @@ public final class EnchantItemGroup LOGGER.warning(getClass().getSimpleName() + ": item group: " + _name + " doesn't have any chances!"); return -1; } + + /** + * @return the maximum enchant level for current enchant item group. + */ + public int getMaximumEnchant() + { + if (_maximumEnchant == -1) + { + for (RangeChanceHolder holder : _chances) + { + if ((holder.getChance() > 0) && (holder.getMax() > _maximumEnchant)) + { + _maximumEnchant = holder.getMax(); + } + } + _maximumEnchant++; + } + return _maximumEnchant; + } } diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java index 8548c7b8f8..a505ef0c43 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java @@ -44,6 +44,7 @@ import org.l2jmobius.gameserver.model.holders.MultisellEntryHolder; import org.l2jmobius.gameserver.model.holders.MultisellListHolder; import org.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; import org.l2jmobius.gameserver.model.items.Item; +import org.l2jmobius.gameserver.model.items.enchant.EnchantItemGroup; import org.l2jmobius.gameserver.network.serverpackets.MultiSellList; public final class MultisellData implements IXmlReader @@ -117,7 +118,54 @@ public final class MultisellData implements IXmlReader final int id = parseInteger(d.getAttributes(), "id"); final long count = parseLong(d.getAttributes(), "count"); final double chance = parseDouble(d.getAttributes(), "chance", Double.NaN); - final byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0); + byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0); + + if (enchantmentLevel > 0) + { + final Item item = ItemTable.getInstance().getTemplate(id); + if (item != null) + { + if (item.isWeapon()) + { + if (item.isMagicWeapon()) + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("MAGE_WEAPON_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + else + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("FIGHTER_WEAPON_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + } + else if (item.isArmor()) + { + if (item.getBodyPart() == Item.SLOT_FULL_ARMOR) + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("FULL_ARMOR_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + else + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("ARMOR_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + } + } + } + final ItemChanceHolder product = new ItemChanceHolder(id, chance, count, enchantmentLevel); if (itemExists(product)) diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java index 6209f573bd..a1a6fdd194 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java @@ -31,6 +31,7 @@ public final class EnchantItemGroup private static final Logger LOGGER = Logger.getLogger(EnchantItemGroup.class.getName()); private final List _chances = new ArrayList<>(); private final String _name; + private int _maximumEnchant = -1; public EnchantItemGroup(String name) { @@ -74,4 +75,23 @@ public final class EnchantItemGroup LOGGER.warning(getClass().getSimpleName() + ": item group: " + _name + " doesn't have any chances!"); return -1; } + + /** + * @return the maximum enchant level for current enchant item group. + */ + public int getMaximumEnchant() + { + if (_maximumEnchant == -1) + { + for (RangeChanceHolder holder : _chances) + { + if ((holder.getChance() > 0) && (holder.getMax() > _maximumEnchant)) + { + _maximumEnchant = holder.getMax(); + } + } + _maximumEnchant++; + } + return _maximumEnchant; + } } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java index 8548c7b8f8..a505ef0c43 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java @@ -44,6 +44,7 @@ import org.l2jmobius.gameserver.model.holders.MultisellEntryHolder; import org.l2jmobius.gameserver.model.holders.MultisellListHolder; import org.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; import org.l2jmobius.gameserver.model.items.Item; +import org.l2jmobius.gameserver.model.items.enchant.EnchantItemGroup; import org.l2jmobius.gameserver.network.serverpackets.MultiSellList; public final class MultisellData implements IXmlReader @@ -117,7 +118,54 @@ public final class MultisellData implements IXmlReader final int id = parseInteger(d.getAttributes(), "id"); final long count = parseLong(d.getAttributes(), "count"); final double chance = parseDouble(d.getAttributes(), "chance", Double.NaN); - final byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0); + byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0); + + if (enchantmentLevel > 0) + { + final Item item = ItemTable.getInstance().getTemplate(id); + if (item != null) + { + if (item.isWeapon()) + { + if (item.isMagicWeapon()) + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("MAGE_WEAPON_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + else + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("FIGHTER_WEAPON_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + } + else if (item.isArmor()) + { + if (item.getBodyPart() == Item.SLOT_FULL_ARMOR) + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("FULL_ARMOR_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + else + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("ARMOR_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + } + } + } + final ItemChanceHolder product = new ItemChanceHolder(id, chance, count, enchantmentLevel); if (itemExists(product)) diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java index 6209f573bd..a1a6fdd194 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java @@ -31,6 +31,7 @@ public final class EnchantItemGroup private static final Logger LOGGER = Logger.getLogger(EnchantItemGroup.class.getName()); private final List _chances = new ArrayList<>(); private final String _name; + private int _maximumEnchant = -1; public EnchantItemGroup(String name) { @@ -74,4 +75,23 @@ public final class EnchantItemGroup LOGGER.warning(getClass().getSimpleName() + ": item group: " + _name + " doesn't have any chances!"); return -1; } + + /** + * @return the maximum enchant level for current enchant item group. + */ + public int getMaximumEnchant() + { + if (_maximumEnchant == -1) + { + for (RangeChanceHolder holder : _chances) + { + if ((holder.getChance() > 0) && (holder.getMax() > _maximumEnchant)) + { + _maximumEnchant = holder.getMax(); + } + } + _maximumEnchant++; + } + return _maximumEnchant; + } } diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java index 8548c7b8f8..a505ef0c43 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java @@ -44,6 +44,7 @@ import org.l2jmobius.gameserver.model.holders.MultisellEntryHolder; import org.l2jmobius.gameserver.model.holders.MultisellListHolder; import org.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; import org.l2jmobius.gameserver.model.items.Item; +import org.l2jmobius.gameserver.model.items.enchant.EnchantItemGroup; import org.l2jmobius.gameserver.network.serverpackets.MultiSellList; public final class MultisellData implements IXmlReader @@ -117,7 +118,54 @@ public final class MultisellData implements IXmlReader final int id = parseInteger(d.getAttributes(), "id"); final long count = parseLong(d.getAttributes(), "count"); final double chance = parseDouble(d.getAttributes(), "chance", Double.NaN); - final byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0); + byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0); + + if (enchantmentLevel > 0) + { + final Item item = ItemTable.getInstance().getTemplate(id); + if (item != null) + { + if (item.isWeapon()) + { + if (item.isMagicWeapon()) + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("MAGE_WEAPON_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + else + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("FIGHTER_WEAPON_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + } + else if (item.isArmor()) + { + if (item.getBodyPart() == Item.SLOT_FULL_ARMOR) + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("FULL_ARMOR_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + else + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("ARMOR_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + } + } + } + final ItemChanceHolder product = new ItemChanceHolder(id, chance, count, enchantmentLevel); if (itemExists(product)) diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java index 6209f573bd..a1a6fdd194 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java @@ -31,6 +31,7 @@ public final class EnchantItemGroup private static final Logger LOGGER = Logger.getLogger(EnchantItemGroup.class.getName()); private final List _chances = new ArrayList<>(); private final String _name; + private int _maximumEnchant = -1; public EnchantItemGroup(String name) { @@ -74,4 +75,23 @@ public final class EnchantItemGroup LOGGER.warning(getClass().getSimpleName() + ": item group: " + _name + " doesn't have any chances!"); return -1; } + + /** + * @return the maximum enchant level for current enchant item group. + */ + public int getMaximumEnchant() + { + if (_maximumEnchant == -1) + { + for (RangeChanceHolder holder : _chances) + { + if ((holder.getChance() > 0) && (holder.getMax() > _maximumEnchant)) + { + _maximumEnchant = holder.getMax(); + } + } + _maximumEnchant++; + } + return _maximumEnchant; + } } diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java index 8548c7b8f8..a505ef0c43 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java @@ -44,6 +44,7 @@ import org.l2jmobius.gameserver.model.holders.MultisellEntryHolder; import org.l2jmobius.gameserver.model.holders.MultisellListHolder; import org.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; import org.l2jmobius.gameserver.model.items.Item; +import org.l2jmobius.gameserver.model.items.enchant.EnchantItemGroup; import org.l2jmobius.gameserver.network.serverpackets.MultiSellList; public final class MultisellData implements IXmlReader @@ -117,7 +118,54 @@ public final class MultisellData implements IXmlReader final int id = parseInteger(d.getAttributes(), "id"); final long count = parseLong(d.getAttributes(), "count"); final double chance = parseDouble(d.getAttributes(), "chance", Double.NaN); - final byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0); + byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0); + + if (enchantmentLevel > 0) + { + final Item item = ItemTable.getInstance().getTemplate(id); + if (item != null) + { + if (item.isWeapon()) + { + if (item.isMagicWeapon()) + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("MAGE_WEAPON_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + else + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("FIGHTER_WEAPON_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + } + else if (item.isArmor()) + { + if (item.getBodyPart() == Item.SLOT_FULL_ARMOR) + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("FULL_ARMOR_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + else + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("ARMOR_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + } + } + } + final ItemChanceHolder product = new ItemChanceHolder(id, chance, count, enchantmentLevel); if (itemExists(product)) diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java index 6209f573bd..a1a6fdd194 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java @@ -31,6 +31,7 @@ public final class EnchantItemGroup private static final Logger LOGGER = Logger.getLogger(EnchantItemGroup.class.getName()); private final List _chances = new ArrayList<>(); private final String _name; + private int _maximumEnchant = -1; public EnchantItemGroup(String name) { @@ -74,4 +75,23 @@ public final class EnchantItemGroup LOGGER.warning(getClass().getSimpleName() + ": item group: " + _name + " doesn't have any chances!"); return -1; } + + /** + * @return the maximum enchant level for current enchant item group. + */ + public int getMaximumEnchant() + { + if (_maximumEnchant == -1) + { + for (RangeChanceHolder holder : _chances) + { + if ((holder.getChance() > 0) && (holder.getMax() > _maximumEnchant)) + { + _maximumEnchant = holder.getMax(); + } + } + _maximumEnchant++; + } + return _maximumEnchant; + } } diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java index 8548c7b8f8..a505ef0c43 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java @@ -44,6 +44,7 @@ import org.l2jmobius.gameserver.model.holders.MultisellEntryHolder; import org.l2jmobius.gameserver.model.holders.MultisellListHolder; import org.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; import org.l2jmobius.gameserver.model.items.Item; +import org.l2jmobius.gameserver.model.items.enchant.EnchantItemGroup; import org.l2jmobius.gameserver.network.serverpackets.MultiSellList; public final class MultisellData implements IXmlReader @@ -117,7 +118,54 @@ public final class MultisellData implements IXmlReader final int id = parseInteger(d.getAttributes(), "id"); final long count = parseLong(d.getAttributes(), "count"); final double chance = parseDouble(d.getAttributes(), "chance", Double.NaN); - final byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0); + byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0); + + if (enchantmentLevel > 0) + { + final Item item = ItemTable.getInstance().getTemplate(id); + if (item != null) + { + if (item.isWeapon()) + { + if (item.isMagicWeapon()) + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("MAGE_WEAPON_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + else + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("FIGHTER_WEAPON_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + } + else if (item.isArmor()) + { + if (item.getBodyPart() == Item.SLOT_FULL_ARMOR) + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("FULL_ARMOR_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + else + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("ARMOR_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + } + } + } + final ItemChanceHolder product = new ItemChanceHolder(id, chance, count, enchantmentLevel); if (itemExists(product)) diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java index 6209f573bd..a1a6fdd194 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java @@ -31,6 +31,7 @@ public final class EnchantItemGroup private static final Logger LOGGER = Logger.getLogger(EnchantItemGroup.class.getName()); private final List _chances = new ArrayList<>(); private final String _name; + private int _maximumEnchant = -1; public EnchantItemGroup(String name) { @@ -74,4 +75,23 @@ public final class EnchantItemGroup LOGGER.warning(getClass().getSimpleName() + ": item group: " + _name + " doesn't have any chances!"); return -1; } + + /** + * @return the maximum enchant level for current enchant item group. + */ + public int getMaximumEnchant() + { + if (_maximumEnchant == -1) + { + for (RangeChanceHolder holder : _chances) + { + if ((holder.getChance() > 0) && (holder.getMax() > _maximumEnchant)) + { + _maximumEnchant = holder.getMax(); + } + } + _maximumEnchant++; + } + return _maximumEnchant; + } } diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java index 8548c7b8f8..a505ef0c43 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/xml/impl/MultisellData.java @@ -44,6 +44,7 @@ import org.l2jmobius.gameserver.model.holders.MultisellEntryHolder; import org.l2jmobius.gameserver.model.holders.MultisellListHolder; import org.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; import org.l2jmobius.gameserver.model.items.Item; +import org.l2jmobius.gameserver.model.items.enchant.EnchantItemGroup; import org.l2jmobius.gameserver.network.serverpackets.MultiSellList; public final class MultisellData implements IXmlReader @@ -117,7 +118,54 @@ public final class MultisellData implements IXmlReader final int id = parseInteger(d.getAttributes(), "id"); final long count = parseLong(d.getAttributes(), "count"); final double chance = parseDouble(d.getAttributes(), "chance", Double.NaN); - final byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0); + byte enchantmentLevel = parseByte(d.getAttributes(), "enchantmentLevel", (byte) 0); + + if (enchantmentLevel > 0) + { + final Item item = ItemTable.getInstance().getTemplate(id); + if (item != null) + { + if (item.isWeapon()) + { + if (item.isMagicWeapon()) + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("MAGE_WEAPON_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + else + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("FIGHTER_WEAPON_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + } + else if (item.isArmor()) + { + if (item.getBodyPart() == Item.SLOT_FULL_ARMOR) + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("FULL_ARMOR_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + else + { + final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup("ARMOR_GROUP"); + if (group != null) + { + enchantmentLevel = (byte) Math.min(enchantmentLevel, group.getMaximumEnchant()); + } + } + } + } + } + final ItemChanceHolder product = new ItemChanceHolder(id, chance, count, enchantmentLevel); if (itemExists(product)) diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java index 6209f573bd..a1a6fdd194 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/items/enchant/EnchantItemGroup.java @@ -31,6 +31,7 @@ public final class EnchantItemGroup private static final Logger LOGGER = Logger.getLogger(EnchantItemGroup.class.getName()); private final List _chances = new ArrayList<>(); private final String _name; + private int _maximumEnchant = -1; public EnchantItemGroup(String name) { @@ -74,4 +75,23 @@ public final class EnchantItemGroup LOGGER.warning(getClass().getSimpleName() + ": item group: " + _name + " doesn't have any chances!"); return -1; } + + /** + * @return the maximum enchant level for current enchant item group. + */ + public int getMaximumEnchant() + { + if (_maximumEnchant == -1) + { + for (RangeChanceHolder holder : _chances) + { + if ((holder.getChance() > 0) && (holder.getMax() > _maximumEnchant)) + { + _maximumEnchant = holder.getMax(); + } + } + _maximumEnchant++; + } + return _maximumEnchant; + } }