Sfoglia il codice sorgente

BETA: Restoring Alternate Skill Learning System:
* Minor cleanup.
* JavaDocs added.
* Do '''not'' use it along Skill Check system.
'''Note:''' This system is '''not''' recommended, class imbalance and unwanted side effect may occur.

Zoey76 13 anni fa
parent
commit
8facbc563f

+ 34 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2SkillLearn.java

@@ -16,6 +16,8 @@ package com.l2jserver.gameserver.model;
 
 import java.util.logging.Logger;
 
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.model.base.ClassId;
 import com.l2jserver.gameserver.templates.StatsSet;
 
 /**
@@ -257,4 +259,36 @@ public final class L2SkillLearn
 	{
 		return _learnedByFS;
 	}
+	
+	/**
+	 * Used for AltGameSkillLearn mod.<br>
+	 * If the alternative skill learn system is enabled and the player is learning a skill from a different class apply a fee.<br>
+	 * If the player is learning a skill from other class type (mage learning warrior skills or vice versa) the fee is higher.
+	 * @param playerClass the player class Id.
+	 * @param learningClass the skill learning player class Id.
+	 * @return the amount of SP required to acquire this skill, by calculating the cost for the alternative skill learn system.
+	 */
+	public int getCalculatedLevelUpSp(ClassId playerClass, ClassId learningClass)
+	{
+		if ((playerClass == null) || (learningClass == null))
+		{
+			return _levelUpSp;
+		}
+		
+		int levelUpSp = _levelUpSp;
+		// If the alternative skill learn system is enabled and the player is learning a skill from a different class apply a fee.
+		if (Config.ALT_GAME_SKILL_LEARN && (playerClass != learningClass))
+		{
+			// If the player is learning a skill from other class type (mage learning warrior skills or vice versa) the fee is higher.
+			if (playerClass.isMage() != learningClass.isMage())
+			{
+				levelUpSp *= 3;
+			}
+			else
+			{
+				levelUpSp *= 2;
+			}
+		}
+		return levelUpSp;
+	}
 }

+ 9 - 17
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2NpcInstance.java

@@ -38,14 +38,11 @@ import com.l2jserver.util.StringUtil;
 
 public class L2NpcInstance extends L2Npc
 {
-	private final List<ClassId> _classesToTeach;
-	
 	public L2NpcInstance(int objectId, L2NpcTemplate template)
 	{
 		super(objectId, template);
 		setInstanceType(InstanceType.L2NpcInstance);
 		setIsInvul(false);
-		_classesToTeach = template.getTeachInfo();
 	}
 	
 	@Override
@@ -74,7 +71,7 @@ public class L2NpcInstance extends L2Npc
 	
 	public List<ClassId> getClassesToTeach()
 	{
-		return _classesToTeach;
+		return getTemplate().getTeachInfo();
 	}
 	
 	/**
@@ -91,14 +88,12 @@ public class L2NpcInstance extends L2Npc
 		}
 		
 		final int npcId = npc.getTemplate().getNpcId();
-		
 		if (npcId == 32611) //Tolonis (Officer)
 		{
 			final FastList<L2SkillLearn> skills = SkillTreesData.getInstance().getAvailableCollectSkills(player);
 			final AcquireSkillList asl = new AcquireSkillList(SkillType.Collect);
 			
 			int counts = 0;
-			
 			for (L2SkillLearn s : skills)
 			{
 				final L2Skill sk = SkillTable.getInstance().getInfo(s.getSkillId(), s.getSkillLevel());
@@ -121,7 +116,7 @@ public class L2NpcInstance extends L2Npc
 				}
 				else
 				{
-					player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NO_MORE_SKILLS_TO_LEARN));
+					player.sendPacket(SystemMessageId.NO_MORE_SKILLS_TO_LEARN);
 				}
 			}
 			else
@@ -137,7 +132,7 @@ public class L2NpcInstance extends L2Npc
 			return;
 		}
 		
-		if (((L2NpcInstance)npc).getClassesToTeach() == null)
+		if (((L2NpcInstance) npc).getClassesToTeach().isEmpty())
 		{
 			NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId());
 			final String sb = StringUtil.concat(
@@ -154,17 +149,16 @@ public class L2NpcInstance extends L2Npc
 			return;
 		}
 		
-		//Normal skills, No LearnedByFS, no AutoGet skills.
+		// Normal skills, No LearnedByFS, no AutoGet skills.
 		final FastList<L2SkillLearn> skills = SkillTreesData.getInstance().getAvailableSkills(player, classId, false, false);
 		final AcquireSkillList asl = new AcquireSkillList(AcquireSkillList.SkillType.ClassTransform);
 		int count = 0;
-		
-		for (L2SkillLearn s: skills)
+		player.setLearningClass(classId);
+		for (L2SkillLearn s : skills)
 		{
-			final L2Skill sk = SkillTable.getInstance().getInfo(s.getSkillId(), s.getSkillLevel());
-			if (sk != null)
+			if (SkillTable.getInstance().getInfo(s.getSkillId(), s.getSkillLevel()) != null)
 			{
-				asl.addSkill(s.getSkillId(), s.getSkillLevel(), s.getSkillLevel(), s.getLevelUpSp(), 0);
+				asl.addSkill(s.getSkillId(), s.getSkillLevel(), s.getSkillLevel(), s.getCalculatedLevelUpSp(player.getClassId(), classId), 0);
 				count++;
 			}
 		}
@@ -172,7 +166,6 @@ public class L2NpcInstance extends L2Npc
 		if (count == 0)
 		{
 			final FastMap<Integer, L2SkillLearn> skillTree = SkillTreesData.getInstance().getCompleteClassSkillTree(classId);
-			
 			final int minLevel = SkillTreesData.getInstance().getMinLevelForNewSkill(player, skillTree);
 			if (minLevel > 0)
 			{
@@ -182,7 +175,6 @@ public class L2NpcInstance extends L2Npc
 			}
 			else
 			{
-				//TODO: Is this SysMsg really used here?
 				if (player.getClassId().level() == 1)
 				{
 					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.NO_SKILLS_TO_LEARN_RETURN_AFTER_S1_CLASS_CHANGE);
@@ -191,7 +183,7 @@ public class L2NpcInstance extends L2Npc
 				}
 				else
 				{
-					player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NO_MORE_SKILLS_TO_LEARN));
+					player.sendPacket(SystemMessageId.NO_MORE_SKILLS_TO_LEARN);
 				}
 			}
 		}

+ 21 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -2641,6 +2641,27 @@ public final class L2PcInstance extends L2Playable
 		}
 	}
 	
+	/**
+	 * Used for AltGameSkillLearn to set a custom skill learning class Id.
+	 */
+	private ClassId _learningClass = getClassId();
+	
+	/**
+	 * @return the custom skill learning class Id.
+	 */
+	public ClassId getLearningClass()
+	{
+		return _learningClass;
+	}
+	
+	/**
+	 * @param learningClass the custom skill learning class Id to set.
+	 */
+	public void setLearningClass(ClassId learningClass)
+	{
+		_learningClass = learningClass;
+	}
+	
 	/**
 	 * @return the Experience of the L2PcInstance.
 	 */

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

@@ -149,7 +149,7 @@ public final class RequestAcquireSkill extends L2GameClientPacket
 				}
 				else
 				{
-					final L2SkillLearn s = SkillTreesData.getInstance().getClassSkill(_id, _level, activeChar.getClassId());
+					final L2SkillLearn s = SkillTreesData.getInstance().getClassSkill(_id, _level, activeChar.getLearningClass());
 					if (checkPlayerSkill(activeChar, trainer, s))
 					{
 						giveSkill(activeChar, trainer, skill);
@@ -406,7 +406,7 @@ public final class RequestAcquireSkill extends L2GameClientPacket
 	 * @param player the skill learning player.
 	 * @param trainer the skills teaching Npc.
 	 * @param s the skill to be learn.
-	 * @return 
+	 * @return {@code true} if all requirements are meet, {@code false} otherwise. 
 	 */
 	private boolean checkPlayerSkill(L2PcInstance player, L2Npc trainer, L2SkillLearn s)
 	{
@@ -417,16 +417,16 @@ public final class RequestAcquireSkill extends L2GameClientPacket
 				//Hack check.
 				if (s.getGetLevel() > player.getLevel())
 				{
-					player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_DONT_MEET_SKILL_LEVEL_REQUIREMENTS));
+					player.sendPacket(SystemMessageId.YOU_DONT_MEET_SKILL_LEVEL_REQUIREMENTS);
 					Util.handleIllegalPlayerAction(player, "Player " + player.getName() + ", level " + player.getLevel() + " is requesting skill Id: " + _id + " level " + _level + " without having minimum required level, " + s.getGetLevel() + "!", 0);
 					return false;
 				}
 				
-				//First it checks that the skill require SP and the player has enough SP to learn it.
-				final int levelUpSp = s.getLevelUpSp();
+				// First it checks that the skill require SP and the player has enough SP to learn it.
+				final int levelUpSp = s.getCalculatedLevelUpSp(player.getClassId(), player.getLearningClass());
 				if ((levelUpSp > 0) && (levelUpSp > player.getSp()))
 				{
-					player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_ENOUGH_SP_TO_LEARN_SKILL));
+					player.sendPacket(SystemMessageId.NOT_ENOUGH_SP_TO_LEARN_SKILL);
 					showSkillList(trainer, player);
 					return false;
 				}
@@ -446,7 +446,7 @@ public final class RequestAcquireSkill extends L2GameClientPacket
 						if (reqItemCount < itemIdCount[1])
 						{
 							//Player doesn't have required item.
-							player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ITEM_MISSING_TO_LEARN_SKILL));
+							player.sendPacket(SystemMessageId.ITEM_MISSING_TO_LEARN_SKILL);
 							showSkillList(trainer, player);
 							return false;
 						}
@@ -527,7 +527,7 @@ public final class RequestAcquireSkill extends L2GameClientPacket
 		}
 		else
 		{
-			L2NpcInstance.showSkillList(player, trainer, player.getClassId());
+			L2NpcInstance.showSkillList(player, trainer, player.getLearningClass());
 		}
 	}
 	

+ 3 - 5
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestAcquireSkillInfo.java

@@ -99,7 +99,6 @@ public final class RequestAcquireSkillInfo extends L2GameClientPacket
 				if (trainer instanceof L2TransformManagerInstance)
 				{
 					final L2SkillLearn s = SkillTreesData.getInstance().getTransformSkill(_id, _level);
-					
 					if (s != null)
 					{
 						int itemId = -1;
@@ -124,15 +123,14 @@ public final class RequestAcquireSkillInfo extends L2GameClientPacket
 					}
 					return;
 				}
-				else if (trainer.getTemplate().canTeach(activeChar.getClassId()))
+				else if (trainer.getTemplate().canTeach(activeChar.getLearningClass()))
 				{
-					final L2SkillLearn s = SkillTreesData.getInstance().getClassSkill(_id, _level, activeChar.getClassId());
+					final L2SkillLearn s = SkillTreesData.getInstance().getClassSkill(_id, _level, activeChar.getLearningClass());
 					if (s != null)
 					{
 						int itemId = -1;
 						int itemCount = -1;
-						final int levelUpSp = s.getLevelUpSp();
-						
+						final int levelUpSp = s.getCalculatedLevelUpSp(activeChar.getClassId(), activeChar.getLearningClass());
 						final AcquireSkillInfo asi = new AcquireSkillInfo(_id, _level, levelUpSp, SkillType.ClassTransform);
 						
 						if (s.getItemsIdCount() != null)

+ 0 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/templates/chars/L2NpcTemplate.java

@@ -557,7 +557,6 @@ public final class L2NpcTemplate extends L2CharTemplate
 		{
 			return _teachInfo.contains(classId.getParent());
 		}
-		
 		return _teachInfo.contains(classId);
 	}