Sfoglia il codice sorgente

BETA: Fix for Squad skills not available for sub-pledges, skill display require retail confirmation.

Zoey76 13 anni fa
parent
commit
6a8c0aa31e

+ 16 - 13
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestAcquireSkill.java

@@ -96,27 +96,30 @@ public final class RequestAcquireSkill extends L2GameClientPacket
 			return;
 		}
 		
-		final SkillType skillType = SkillType.values()[_skillType];
-		if ((activeChar.getSkillLevel(_id) >= _level) && (skillType != SkillType.SubPledge))
-		{
-			// Already knows the skill with this level
-			return;
-		}
-		
 		final L2Skill skill = SkillTable.getInstance().getInfo(_id, _level);
 		if (skill == null)
 		{
-			_log.warning("Player " + activeChar.getName() + " is trying to learn a null skill id: " + _id + " level: " + _level + "!");
+			_log.warning(RequestAcquireSkill.class.getSimpleName() + ": Player " + activeChar.getName() + " is trying to learn a null skill Id: " + _id + " level: " + _level + "!");
 			return;
 		}
 		
 		// Hack check. Doesn't apply to all Skill Types
-		if (((skillType != SkillType.Transfer) && ((_level > 1) && (activeChar.getKnownSkill(_id) == null))) || ((activeChar.getKnownSkill(_id) != null) && (activeChar.getKnownSkill(_id).getLevel() != (_level - 1))))
+		final int prevSkillLevel = activeChar.getSkillLevel(_id);
+		final SkillType skillType = SkillType.values()[_skillType];
+		if ((prevSkillLevel > 0) && !((skillType == SkillType.Transfer) || (skillType == SkillType.SubPledge)))
 		{
-			// The previous level skill has not been learned.
-			activeChar.sendPacket(SystemMessageId.PREVIOUS_LEVEL_SKILL_NOT_LEARNED);
-			Util.handleIllegalPlayerAction(activeChar, "Player " + activeChar.getName() + " is requesting skill Id: " + _id + " level " + _level + " without knowing it's previous level!", 0);
-			return;
+			if (prevSkillLevel == _level)
+			{
+				_log.warning("Player " + activeChar.getName() + " is trying to learn a skill that already knows, Id: " + _id + " level: " + _level + "!");
+				return;
+			}
+			else if (prevSkillLevel != (_level - 1))
+			{
+				// The previous level skill has not been learned.
+				activeChar.sendPacket(SystemMessageId.PREVIOUS_LEVEL_SKILL_NOT_LEARNED);
+				Util.handleIllegalPlayerAction(activeChar, "Player " + activeChar.getName() + " is requesting skill Id: " + _id + " level " + _level + " without knowing it's previous level!", 0);
+				return;
+			}
 		}
 		
 		switch (skillType)

+ 12 - 7
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestAcquireSkillInfo.java

@@ -54,18 +54,17 @@ public final class RequestAcquireSkillInfo extends L2GameClientPacket
 	{
 		if ((_id <= 0) || (_level <= 0))
 		{
+			_log.warning(RequestAcquireSkillInfo.class.getSimpleName() + ": Invalid Id: " + _id + " or level: " + _level + "!");
 			return;
 		}
 		
 		final L2PcInstance activeChar = getClient().getActiveChar();
-		
 		if (activeChar == null)
 		{
 			return;
 		}
 		
 		final L2Npc trainer = activeChar.getLastFolkNPC();
-		
 		if (!(trainer instanceof L2NpcInstance))
 		{
 			return;
@@ -77,19 +76,25 @@ public final class RequestAcquireSkillInfo extends L2GameClientPacket
 		}
 		
 		final L2Skill skill = SkillTable.getInstance().getInfo(_id, _level);
-		
 		if (skill == null)
 		{
 			_log.warning(RequestAcquireSkillInfo.class.getSimpleName() + ": Skill Id: " + _id + " level: " + _level + " is undefined. " + RequestAcquireSkillInfo.class.getName() + " failed.");
 			return;
 		}
 		
+		// Hack check. Doesn't apply to all Skill Types
+		final int prevSkillLevel = activeChar.getSkillLevel(_id);
 		final SkillType skillType = SkillType.values()[_skillType];
-		
-		//Doesn't apply to all Skill Types
-		if (((skillType != SkillType.Transfer) && ((_level > 1) && (activeChar.getKnownSkill(_id) == null))) || ((activeChar.getKnownSkill(_id) != null) && (activeChar.getKnownSkill(_id).getLevel() != (_level - 1))))
+		if ((prevSkillLevel > 0) && !((skillType == SkillType.Transfer) || (skillType == SkillType.SubPledge)))
 		{
-			_log.warning(RequestAcquireSkillInfo.class.getSimpleName() + ": Player " + activeChar.getName() + " is requesting info for skill Id: " + _id + " level " + _level + " without knowing it's previous level!");
+			if (prevSkillLevel == _level)
+			{
+				_log.warning(RequestAcquireSkillInfo.class.getSimpleName() + ": Player " + activeChar.getName() + " is trequesting info for a skill that already knows, Id: " + _id + " level: " + _level + "!");
+			}
+			else if (prevSkillLevel != (_level - 1))
+			{
+				_log.warning(RequestAcquireSkillInfo.class.getSimpleName() + ": Player " + activeChar.getName() + " is requesting info for skill Id: " + _id + " level " + _level + " without knowing it's previous level!");
+			}
 		}
 		
 		switch (skillType)