Production enchant level should not exceed maximum enchant item group value.

This commit is contained in:
MobiusDevelopment 2019-05-12 14:57:52 +00:00
parent bedb7061c2
commit fc5abb312f
24 changed files with 828 additions and 12 deletions

View File

@ -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))

View File

@ -31,6 +31,7 @@ public final class EnchantItemGroup
private static final Logger LOGGER = Logger.getLogger(EnchantItemGroup.class.getName());
private final List<RangeChanceHolder> _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;
}
}

View File

@ -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))

View File

@ -31,6 +31,7 @@ public final class EnchantItemGroup
private static final Logger LOGGER = Logger.getLogger(EnchantItemGroup.class.getName());
private final List<RangeChanceHolder> _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;
}
}

View File

@ -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))

View File

@ -31,6 +31,7 @@ public final class EnchantItemGroup
private static final Logger LOGGER = Logger.getLogger(EnchantItemGroup.class.getName());
private final List<RangeChanceHolder> _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;
}
}

View File

@ -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))

View File

@ -31,6 +31,7 @@ public final class EnchantItemGroup
private static final Logger LOGGER = Logger.getLogger(EnchantItemGroup.class.getName());
private final List<RangeChanceHolder> _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;
}
}

View File

@ -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))

View File

@ -31,6 +31,7 @@ public final class EnchantItemGroup
private static final Logger LOGGER = Logger.getLogger(EnchantItemGroup.class.getName());
private final List<RangeChanceHolder> _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;
}
}

View File

@ -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))

View File

@ -31,6 +31,7 @@ public final class EnchantItemGroup
private static final Logger LOGGER = Logger.getLogger(EnchantItemGroup.class.getName());
private final List<RangeChanceHolder> _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;
}
}

View File

@ -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))

View File

@ -31,6 +31,7 @@ public final class EnchantItemGroup
private static final Logger LOGGER = Logger.getLogger(EnchantItemGroup.class.getName());
private final List<RangeChanceHolder> _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;
}
}

View File

@ -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))

View File

@ -31,6 +31,7 @@ public final class EnchantItemGroup
private static final Logger LOGGER = Logger.getLogger(EnchantItemGroup.class.getName());
private final List<RangeChanceHolder> _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;
}
}

View File

@ -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))

View File

@ -31,6 +31,7 @@ public final class EnchantItemGroup
private static final Logger LOGGER = Logger.getLogger(EnchantItemGroup.class.getName());
private final List<RangeChanceHolder> _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;
}
}

View File

@ -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))

View File

@ -31,6 +31,7 @@ public final class EnchantItemGroup
private static final Logger LOGGER = Logger.getLogger(EnchantItemGroup.class.getName());
private final List<RangeChanceHolder> _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;
}
}

View File

@ -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))

View File

@ -31,6 +31,7 @@ public final class EnchantItemGroup
private static final Logger LOGGER = Logger.getLogger(EnchantItemGroup.class.getName());
private final List<RangeChanceHolder> _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;
}
}

View File

@ -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))

View File

@ -31,6 +31,7 @@ public final class EnchantItemGroup
private static final Logger LOGGER = Logger.getLogger(EnchantItemGroup.class.getName());
private final List<RangeChanceHolder> _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;
}
}