2
0
Эх сурвалжийг харах

BETA: Rune of Crystal implementation:
* Support for bonus and penalty calculation using bonus.

Zoey76 12 жил өмнө
parent
commit
f0009d6652

+ 12 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/SkillTable.java

@@ -179,7 +179,8 @@ public class SkillTable
 		VOID_FLOW(3631, 1),
 		THE_VICTOR_OF_WAR(5074, 1),
 		THE_VANQUISHED_OF_WAR(5075, 1),
-		SPECIAL_TREE_RECOVERY_BONUS(2139, 1);
+		SPECIAL_TREE_RECOVERY_BONUS(2139, 1),
+		WEAPON_GRADE_PENALTY(6209, 1);
 		
 		private final SkillHolder _holder;
 		
@@ -188,6 +189,16 @@ public class SkillTable
 			_holder = new SkillHolder(id, level);
 		}
 		
+		public int getId()
+		{
+			return _holder.getSkillId();
+		}
+		
+		public int getLevel()
+		{
+			return _holder.getSkillLvl();
+		}
+		
 		public L2Skill getSkill()
 		{
 			return _holder.getSkill();

+ 52 - 20
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -77,6 +77,7 @@ import com.l2jserver.gameserver.datatables.PetDataTable;
 import com.l2jserver.gameserver.datatables.RecipeData;
 import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.datatables.SkillTreesData;
+import com.l2jserver.gameserver.datatables.SkillTable.FrequentSkill;
 import com.l2jserver.gameserver.handler.IItemHandler;
 import com.l2jserver.gameserver.handler.ItemHandler;
 import com.l2jserver.gameserver.instancemanager.AntiFeedManager;
@@ -755,6 +756,7 @@ public final class L2PcInstance extends L2Playable
 	
 	private int _expertiseArmorPenalty = 0;
 	private int _expertiseWeaponPenalty = 0;
+	private int _expertisePenaltyBonus = 0;
 	
 	private boolean _isEnchanting = false;
 	private L2ItemInstance _activeEnchantItem = null;
@@ -2301,6 +2303,16 @@ public final class L2PcInstance extends L2Playable
 		return _expertiseWeaponPenalty;
 	}
 	
+	public int getExpertisePenaltyBonus()
+	{
+		return _expertisePenaltyBonus;
+	}
+	
+	public void setExpertisePenaltyBonus(int bonus)
+	{
+		_expertisePenaltyBonus = bonus;
+	}
+	
 	public int getWeightPenalty()
 	{
 		if (_dietMode)
@@ -2365,44 +2377,58 @@ public final class L2PcInstance extends L2Playable
 		if (!Config.EXPERTISE_PENALTY)
 			return;
 		
+		final int expertiseLevel = getExpertiseLevel();
+		
 		int armorPenalty = 0;
 		int weaponPenalty = 0;
+		int crystaltype;
 		
 		for (L2ItemInstance item : getInventory().getItems())
 		{
-			if (item != null && item.isEquipped() &&
-					((item.getItemType() != L2EtcItemType.ARROW) && (item.getItemType() != L2EtcItemType.BOLT)))
+			if ((item != null) && item.isEquipped() && ((item.getItemType() != L2EtcItemType.ARROW) && (item.getItemType() != L2EtcItemType.BOLT))) 
 			{
-				int crystaltype = item.getItem().getCrystalType();
-				
-				if (crystaltype > getExpertiseLevel())
+				crystaltype = item.getItem().getCrystalType(); 
+			 	if (crystaltype > expertiseLevel) 
 				{
-					if (item.isWeapon() && crystaltype > weaponPenalty)
+			 		if (item.isWeapon() && (crystaltype > weaponPenalty))
+			 		{
 						weaponPenalty = crystaltype;
+			 		}
 					else if (crystaltype > armorPenalty)
+					{
 						armorPenalty = crystaltype;
+					}
 				}
 			}
 		}
 		
 		boolean changed = false;
 		
-		// calc armor penalty
-		armorPenalty = armorPenalty - getExpertiseLevel();
+		final int bonus = getExpertisePenaltyBonus();
 		
-		if (armorPenalty < 0)
-			armorPenalty = 0;
-		else if (armorPenalty > 4)
-			armorPenalty = 4;
+		// calc weapon penalty
+		weaponPenalty = weaponPenalty - expertiseLevel - bonus;
+		if (weaponPenalty < 0)
+		{
+			weaponPenalty = 0;
+		}
+		else if (weaponPenalty > 4)
+		{
+			weaponPenalty = 4;
+		}
 		
-		if (getExpertiseArmorPenalty() != armorPenalty || getSkillLevel(6213) != armorPenalty)
+		if ((getExpertiseArmorPenalty() != armorPenalty) || (getSkillLevel(FrequentSkill.WEAPON_GRADE_PENALTY.getId()) != armorPenalty))
 		{
-			_expertiseArmorPenalty = armorPenalty;
+			_expertiseWeaponPenalty = weaponPenalty;
 			
-			if (_expertiseArmorPenalty > 0)
-				super.addSkill(SkillTable.getInstance().getInfo(6213, _expertiseArmorPenalty)); // level used to be newPenalty
+			if (_expertiseWeaponPenalty > 0)
+			{
+				super.addSkill(SkillTable.getInstance().getInfo(FrequentSkill.WEAPON_GRADE_PENALTY.getId(), _expertiseWeaponPenalty)); // level used to be newPenalty
+			}
 			else
-				super.removeSkill(getKnownSkill(6213));
+			{
+				super.removeSkill(getKnownSkill(FrequentSkill.WEAPON_GRADE_PENALTY.getId()));
+			}
 			
 			changed = true;
 		}
@@ -2410,24 +2436,30 @@ public final class L2PcInstance extends L2Playable
 		// calc weapon penalty
 		weaponPenalty = weaponPenalty - getExpertiseLevel();
 		if (weaponPenalty < 0)
+		{
 			weaponPenalty = 0;
+		}
 		else if (weaponPenalty > 4)
+		{
 			weaponPenalty = 4;
+		}
 		
-		if (getExpertiseWeaponPenalty() != weaponPenalty || getSkillLevel(6209) != weaponPenalty)
+		if (getExpertiseWeaponPenalty() != weaponPenalty || getSkillLevel(FrequentSkill.WEAPON_GRADE_PENALTY.getId()) != weaponPenalty)
 		{
 			_expertiseWeaponPenalty = weaponPenalty;
 			
 			if (_expertiseWeaponPenalty > 0)
-				super.addSkill(SkillTable.getInstance().getInfo(6209, _expertiseWeaponPenalty)); // level used to be newPenalty
+				super.addSkill(SkillTable.getInstance().getInfo(FrequentSkill.WEAPON_GRADE_PENALTY.getId(), _expertiseWeaponPenalty)); // level used to be newPenalty
 			else
-				super.removeSkill(getKnownSkill(6209));
+				super.removeSkill(getKnownSkill(FrequentSkill.WEAPON_GRADE_PENALTY.getId()));
 			
 			changed = true;
 		}
 		
 		if (changed)
+		{
 			sendPacket(new EtcStatusUpdate(this));
+		}
 	}
 	
 	public void checkIfWeaponIsAllowed()

+ 8 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/items/instance/L2ItemInstance.java

@@ -1934,15 +1934,18 @@ public final class L2ItemInstance extends L2Object
 		if (!hasPassiveSkills())
 			return;
 		
-		L2PcInstance player = L2World.getInstance().getPlayer(getOwnerId());
+		final L2PcInstance player = L2World.getInstance().getPlayer(getOwnerId());
 		
 		if (player != null)
 		{
 			for (SkillHolder sh : getItem().getSkills())
 			{
 				if (sh.getSkill().isPassive())
+				{
 					player.addSkill(sh.getSkill(), false);
+				}
 			}
+			player.refreshExpertisePenalty();
 		}
 	}
 	
@@ -1951,15 +1954,18 @@ public final class L2ItemInstance extends L2Object
 		if (!hasPassiveSkills())
 			return;
 		
-		L2PcInstance player = L2World.getInstance().getPlayer(getOwnerId());
+		final L2PcInstance player = L2World.getInstance().getPlayer(getOwnerId());
 		
 		if (player != null)
 		{
 			for (SkillHolder sh : getItem().getSkills())
 			{
 				if (sh.getSkill().isPassive())
+				{
 					player.removeSkill(sh.getSkill(), false, true);
+				}
 			}
+			player.refreshExpertisePenalty();
 		}
 	}