its different than frozen's code ... check this
public void refreshExpertisePenalty()
{
if (!Config.EXPERTISE_PENALTY)
return;
// This code works on principle that first 1-5 levels of penalty is for weapon and 6-10levels are for armor
int intensityW = 0; // Default value
int intensityA = 5; // Default value.
int intensity = 0; // Level of grade penalty.
for (final L2ItemInstance item : getInventory().getItems())
{
if (item != null && item.isEquipped()) // Checks if items equipped
{
final int crystaltype = item.getItem().getCrystalType(); // Gets grade of item
// Checks if item crystal levels is above character levels and also if last penalty for weapon was lower.
if (crystaltype > getExpertiseIndex() && item.isWeapon() && crystaltype > intensityW)
{
intensityW = crystaltype - getExpertiseIndex();
}
// Checks if equiped armor, accesories are above character level and adds each armor penalty.
if (crystaltype > getExpertiseIndex() && !item.isWeapon())
{
intensityA += crystaltype - getExpertiseIndex();
}
}
}
if (intensityA == 5)// Means that there isn't armor penalty.
{
intensity = intensityW;
}
else
{
intensity = intensityW + intensityA;
}
// Checks if penalty is above maximum and sets it to maximum.
if (intensity > 10)
{
intensity = 10;
}
if (getExpertisePenalty() != intensity)
{
int penalties = _masteryPenalty + _masteryWeapPenalty + intensity;
if (penalties > 10) // Checks if penalties are out of bounds for skill level on XML
{
penalties = 10;
}
_expertisePenalty = intensity;
if (penalties > 0)
{
super.addSkill(SkillTable.getInstance().getInfo(4267, intensity));
sendSkillList();
}
else
{
super.removeSkill(getKnownSkill(4267));
sendSkillList();
_expertisePenalty = 0;
}
}
}