Przeglądaj źródła

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 12 lat temu
rodzic
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);
+			}
+		}
 	}
 	
 	/**