Ver Fonte

BETA: Fixing bug causing item skills to be stored in database.
* Reported by: nBd

* '''NOTE:''' Please enable skill checker to cleanup all the skills that should not be stored in database (You can find it in General.properties).

Rumen Nikiforov há 12 anos atrás
pai
commit
36dd493df5

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/SkillTreesData.java

@@ -537,7 +537,7 @@ public final class SkillTreesData extends DocumentParser
 	{
 		// Get available skills
 		int unLearnable = 0;
-		PlayerSkillHolder holder = new PlayerSkillHolder(player.getSkills());
+		PlayerSkillHolder holder = new PlayerSkillHolder(player);
 		List<L2SkillLearn> learnable = getAvailableSkills(player, classId, includeByFs, includeAutoGet, holder);
 		while (learnable.size() > unLearnable)
 		{

+ 3 - 5
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -3045,13 +3045,11 @@ public final class L2PcInstance extends L2Playable
 	public int giveAvailableSkills(boolean includedByFs, boolean includeAutoGet)
 	{
 		int skillCounter = 0;
-		boolean storeInDb;
-		
 		// Get available skills
 		Collection<L2Skill> skills = SkillTreesData.getInstance().getAllAvailableSkills(this, getClassId(), includedByFs, includeAutoGet);
 		for (L2Skill sk : skills)
 		{
-			if (sk.getLevel() == 0)
+			if (getKnownSkill(sk.getId()) == sk)
 			{
 				continue;
 			}
@@ -3072,8 +3070,8 @@ public final class L2PcInstance extends L2Playable
 					sk.getEffects(this, this);
 				}
 			}
-			storeInDb = (sk.getId() != FrequentSkill.ARMOR_GRADE_PENALTY.getId()) && (sk.getId() != FrequentSkill.WEAPON_GRADE_PENALTY.getId());
-			addSkill(sk, storeInDb);
+			
+			addSkill(sk, true);
 		}
 		
 		if (Config.AUTO_LEARN_SKILLS && (skillCounter > 0))

+ 11 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/holders/PlayerSkillHolder.java

@@ -21,6 +21,8 @@ package com.l2jserver.gameserver.model.holders;
 import java.util.HashMap;
 import java.util.Map;
 
+import com.l2jserver.gameserver.datatables.SkillTreesData;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.interfaces.ISkillsHolder;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 
@@ -31,9 +33,16 @@ public class PlayerSkillHolder implements ISkillsHolder
 {
 	private final Map<Integer, L2Skill> _skills = new HashMap<>();
 	
-	public PlayerSkillHolder(Map<Integer, L2Skill> map)
+	public PlayerSkillHolder(L2PcInstance player)
 	{
-		_skills.putAll(map);
+		for (L2Skill skill : player.getSkills().values())
+		{
+			// Adding only skills that can be learned by the player.
+			if (SkillTreesData.getInstance().isSkillAllowed(player, skill))
+			{
+				addSkill(skill);
+			}
+		}
 	}
 	
 	/**