public static void setArmorWastage(L2Character attacker, L2PcInstance target, double damage, boolean shield) { List parts = new FastList(); List notUsedArmorParts = new FastList(); double wastage = Formulas.getInstance().calcArmorWastage(attacker, target, damage, shield); double completePercent = 0; for (StandardArmorPart armorPart : StandardArmorPart.values()) { if (armorPart.getShield() == shield) { L2ItemInstance item = target.getInventory().getPaperdollItem(armorPart.getSlot()); if (item != null) { ArmorPart armor = new ArmorPart(armorPart, item); parts.add(armor); completePercent += armorPart.getPercent(); } } } for (StandardArmorPart armorPart : StandardArmorPart.values()) { if (armorPart.getShield() == shield && !contains(parts, armorPart)) notUsedArmorParts.add(armorPart); } for (StandardArmorPart stdArmorPart : notUsedArmorParts) { for (ArmorPart armorPart : parts) { L2ItemInstance item = armorPart.getItem(); if (item != null) { double extraWastage = (armorPart.getStdArmorPart().getPercent() / completePercent) * stdArmorPart.getPercent(); armorPart.addPercent(extraWastage); } } } for (ArmorPart armorPart : parts) { L2ItemInstance item = armorPart.getItem(); if (item != null) { item.setWastage(item.getWastage() - (armorPart.getCompletePercent() * wastage)); } } }