Production enchant level should not exceed maximum enchant item group value.
This commit is contained in:
		| @@ -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)) | ||||
|   | ||||
| @@ -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; | ||||
| 	} | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 MobiusDevelopment
					MobiusDevelopment