|
@@ -694,7 +694,8 @@ public final class L2PcInstance extends L2Playable
|
|
|
|
|
|
/** The current higher Expertise of the L2PcInstance (None=0, D=1, C=2, B=3, A=4, S=5, S80=6, S84=7)*/
|
|
|
private int _expertiseIndex; // index in EXPERTISE_LEVELS
|
|
|
- private int _expertisePenalty = 0;
|
|
|
+ private int _expertiseArmorPenalty = 0;
|
|
|
+ private int _expertiseWeaponPenalty = 0;
|
|
|
|
|
|
private boolean _isEnchanting = false;
|
|
|
private L2ItemInstance _activeEnchantItem = null;
|
|
@@ -2173,9 +2174,14 @@ public final class L2PcInstance extends L2Playable
|
|
|
return (int)calcStat(Stats.MAX_LOAD, baseLoad*Config.ALT_WEIGHT_LIMIT, this, null);
|
|
|
}
|
|
|
|
|
|
- public int getExpertisePenalty()
|
|
|
+ public int getExpertiseArmorPenalty()
|
|
|
{
|
|
|
- return _expertisePenalty;
|
|
|
+ return _expertiseArmorPenalty;
|
|
|
+ }
|
|
|
+
|
|
|
+ public int getExpertiseWeaponPenalty()
|
|
|
+ {
|
|
|
+ return _expertiseWeaponPenalty;
|
|
|
}
|
|
|
|
|
|
public int getWeightPenalty()
|
|
@@ -2240,35 +2246,68 @@ public final class L2PcInstance extends L2Playable
|
|
|
|
|
|
public void refreshExpertisePenalty()
|
|
|
{
|
|
|
- int newPenalty = 0;
|
|
|
-
|
|
|
+ int armorPenalty = 0;
|
|
|
+ int weaponPenalty = 0;
|
|
|
+
|
|
|
for (L2ItemInstance item : getInventory().getItems())
|
|
|
{
|
|
|
if (item != null && item.isEquipped())
|
|
|
{
|
|
|
int crystaltype = item.getItem().getCrystalType();
|
|
|
-
|
|
|
- if (crystaltype > newPenalty)
|
|
|
- newPenalty = crystaltype;
|
|
|
+
|
|
|
+ if (crystaltype > getExpertiseIndex())
|
|
|
+ {
|
|
|
+ if (item.isWeapon() && crystaltype > weaponPenalty)
|
|
|
+ weaponPenalty = crystaltype;
|
|
|
+ else if (crystaltype > armorPenalty)
|
|
|
+ armorPenalty = crystaltype;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- newPenalty = newPenalty - getExpertiseIndex();
|
|
|
-
|
|
|
- if (newPenalty <= 0)
|
|
|
- newPenalty = 0;
|
|
|
-
|
|
|
- if (getExpertisePenalty() != newPenalty)
|
|
|
+
|
|
|
+ boolean changed = false;
|
|
|
+
|
|
|
+ // calc armor penalty
|
|
|
+ armorPenalty = armorPenalty - getExpertiseIndex();
|
|
|
+
|
|
|
+ if (armorPenalty < 0)
|
|
|
+ armorPenalty = 0;
|
|
|
+ else if (armorPenalty > 4)
|
|
|
+ armorPenalty = 4;
|
|
|
+
|
|
|
+ if (getExpertiseArmorPenalty() != armorPenalty)
|
|
|
{
|
|
|
- _expertisePenalty = newPenalty;
|
|
|
-
|
|
|
- if (newPenalty > 0)
|
|
|
- super.addSkill(SkillTable.getInstance().getInfo(4267, 1)); // level used to be newPenalty
|
|
|
+ _expertiseArmorPenalty = armorPenalty;
|
|
|
+
|
|
|
+ if (_expertiseArmorPenalty > 0)
|
|
|
+ super.addSkill(SkillTable.getInstance().getInfo(6213, _expertiseArmorPenalty)); // level used to be newPenalty
|
|
|
else
|
|
|
- super.removeSkill(getKnownSkill(4267));
|
|
|
-
|
|
|
- sendPacket(new EtcStatusUpdate(this));
|
|
|
+ super.removeSkill(getKnownSkill(6213));
|
|
|
+
|
|
|
+ changed = true;
|
|
|
}
|
|
|
+
|
|
|
+ // calc weapon penalty
|
|
|
+ weaponPenalty = weaponPenalty - getExpertiseIndex();
|
|
|
+ if (weaponPenalty < 0)
|
|
|
+ weaponPenalty = 0;
|
|
|
+ else if (weaponPenalty > 4)
|
|
|
+ weaponPenalty = 4;
|
|
|
+
|
|
|
+ if (getExpertiseWeaponPenalty() != weaponPenalty)
|
|
|
+ {
|
|
|
+ _expertiseWeaponPenalty = weaponPenalty;
|
|
|
+
|
|
|
+ if (_expertiseWeaponPenalty > 0)
|
|
|
+ super.addSkill(SkillTable.getInstance().getInfo(6209, _expertiseWeaponPenalty)); // level used to be newPenalty
|
|
|
+ else
|
|
|
+ super.removeSkill(getKnownSkill(weaponPenalty));
|
|
|
+
|
|
|
+ changed = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (changed)
|
|
|
+ sendPacket(new EtcStatusUpdate(this));
|
|
|
}
|
|
|
|
|
|
public void checkIfWeaponIsAllowed()
|