浏览代码

BETA: Unhardcoding Avant-Garde AI.
* Minor packets rework/cleanup.
* Replacing Javolution in AcquireSkillList with Java implementation.
* AcquireSkillType enum to uppercase.
* Making some method from Quest static.

Zoey76 12 年之前
父节点
当前提交
2c12a4c7d4
共有 16 个文件被更改,包括 175 次插入538 次删除
  1. 8 8
      L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/SkillTreesData.java
  2. 0 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2Object.java
  3. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2CastleMagicianInstance.java
  4. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2FishermanInstance.java
  5. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2FortSupportCaptainInstance.java
  6. 2 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2NpcInstance.java
  7. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2TrainerHealersInstance.java
  8. 0 368
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2TransformManagerInstance.java
  9. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2VillageMasterInstance.java
  10. 14 9
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/base/AcquireSkillType.java
  11. 46 44
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/quest/Quest.java
  12. 14 23
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/quest/QuestState.java
  13. 53 29
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestAcquireSkill.java
  14. 22 43
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestAcquireSkillInfo.java
  15. 2 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/AcquireSkillInfo.java
  16. 9 5
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/AcquireSkillList.java

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

@@ -840,28 +840,28 @@ public final class SkillTreesData extends DocumentParser
 		L2SkillLearn sl = null;
 		L2SkillLearn sl = null;
 		switch (skillType)
 		switch (skillType)
 		{
 		{
-			case Class:
+			case CLASS:
 				sl = getClassSkill(id, lvl, player.getLearningClass());
 				sl = getClassSkill(id, lvl, player.getLearningClass());
 				break;
 				break;
-			case Transform:
+			case TRANSFORM:
 				sl = getTransformSkill(id, lvl);
 				sl = getTransformSkill(id, lvl);
 				break;
 				break;
-			case Fishing:
+			case FISHING:
 				sl = getFishingSkill(id, lvl);
 				sl = getFishingSkill(id, lvl);
 				break;
 				break;
-			case Pledge:
+			case PLEDGE:
 				sl = getPledgeSkill(id, lvl);
 				sl = getPledgeSkill(id, lvl);
 				break;
 				break;
-			case SubPledge:
+			case SUBPLEDGE:
 				sl = getSubPledgeSkill(id, lvl);
 				sl = getSubPledgeSkill(id, lvl);
 				break;
 				break;
-			case Transfer:
+			case TRANSFER:
 				sl = getTransferSkill(id, lvl, player.getClassId());
 				sl = getTransferSkill(id, lvl, player.getClassId());
 				break;
 				break;
-			case SubClass:
+			case SUBCLASS:
 				sl = getSubClassSkill(id, lvl);
 				sl = getSubClassSkill(id, lvl);
 				break;
 				break;
-			case Collect:
+			case COLLECT:
 				sl = getCollectSkill(id, lvl);
 				sl = getCollectSkill(id, lvl);
 				break;
 				break;
 		}
 		}

+ 0 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2Object.java

@@ -161,7 +161,6 @@ public abstract class L2Object
 		L2TeleporterInstance(L2Npc),
 		L2TeleporterInstance(L2Npc),
 		L2TrainerInstance(L2NpcInstance),
 		L2TrainerInstance(L2NpcInstance),
 		L2TrainerHealersInstance(L2TrainerInstance),
 		L2TrainerHealersInstance(L2TrainerInstance),
-		L2TransformManagerInstance(L2MerchantInstance),
 		L2VillageMasterInstance(L2NpcInstance),
 		L2VillageMasterInstance(L2NpcInstance),
 		L2WyvernManagerInstance(L2NpcInstance),
 		L2WyvernManagerInstance(L2NpcInstance),
 		// Doormens
 		// Doormens

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2CastleMagicianInstance.java

@@ -364,7 +364,7 @@ public class L2CastleMagicianInstance extends L2NpcInstance implements L2SquadTr
 			if (player.isClanLeader())
 			if (player.isClanLeader())
 			{
 			{
 				final List<L2SkillLearn> skills = SkillTreesData.getInstance().getAvailableSubPledgeSkills(player.getClan());
 				final List<L2SkillLearn> skills = SkillTreesData.getInstance().getAvailableSubPledgeSkills(player.getClan());
-				final AcquireSkillList asl = new AcquireSkillList(AcquireSkillType.SubPledge);
+				final AcquireSkillList asl = new AcquireSkillList(AcquireSkillType.SUBPLEDGE);
 				int count = 0;
 				int count = 0;
 				
 				
 				for (L2SkillLearn s : skills)
 				for (L2SkillLearn s : skills)

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2FishermanInstance.java

@@ -71,7 +71,7 @@ public final class L2FishermanInstance extends L2MerchantInstance
 	public static void showFishSkillList(L2PcInstance player)
 	public static void showFishSkillList(L2PcInstance player)
 	{
 	{
 		final List<L2SkillLearn> skills = SkillTreesData.getInstance().getAvailableFishingSkills(player);
 		final List<L2SkillLearn> skills = SkillTreesData.getInstance().getAvailableFishingSkills(player);
-		final AcquireSkillList asl = new AcquireSkillList(AcquireSkillType.Fishing);
+		final AcquireSkillList asl = new AcquireSkillList(AcquireSkillType.FISHING);
 		
 		
 		int count = 0;
 		int count = 0;
 		
 		

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2FortSupportCaptainInstance.java

@@ -150,7 +150,7 @@ public class L2FortSupportCaptainInstance extends L2MerchantInstance implements
 			if (player.isClanLeader())
 			if (player.isClanLeader())
 			{
 			{
 				final List<L2SkillLearn> skills = SkillTreesData.getInstance().getAvailableSubPledgeSkills(player.getClan());
 				final List<L2SkillLearn> skills = SkillTreesData.getInstance().getAvailableSubPledgeSkills(player.getClan());
-				final AcquireSkillList asl = new AcquireSkillList(AcquireSkillType.SubPledge);
+				final AcquireSkillList asl = new AcquireSkillList(AcquireSkillType.SUBPLEDGE);
 				int count = 0;
 				int count = 0;
 				
 				
 				for (L2SkillLearn s : skills)
 				for (L2SkillLearn s : skills)

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

@@ -80,7 +80,7 @@ public class L2NpcInstance extends L2Npc
 		if (npcId == 32611) // Tolonis (Officer)
 		if (npcId == 32611) // Tolonis (Officer)
 		{
 		{
 			final List<L2SkillLearn> skills = SkillTreesData.getInstance().getAvailableCollectSkills(player);
 			final List<L2SkillLearn> skills = SkillTreesData.getInstance().getAvailableCollectSkills(player);
-			final AcquireSkillList asl = new AcquireSkillList(AcquireSkillType.Collect);
+			final AcquireSkillList asl = new AcquireSkillList(AcquireSkillType.COLLECT);
 			
 			
 			int counts = 0;
 			int counts = 0;
 			for (L2SkillLearn s : skills)
 			for (L2SkillLearn s : skills)
@@ -132,7 +132,7 @@ public class L2NpcInstance extends L2Npc
 		
 		
 		// Normal skills, No LearnedByFS, no AutoGet skills.
 		// Normal skills, No LearnedByFS, no AutoGet skills.
 		final List<L2SkillLearn> skills = SkillTreesData.getInstance().getAvailableSkills(player, classId, false, false);
 		final List<L2SkillLearn> skills = SkillTreesData.getInstance().getAvailableSkills(player, classId, false, false);
-		final AcquireSkillList asl = new AcquireSkillList(AcquireSkillType.Class);
+		final AcquireSkillList asl = new AcquireSkillList(AcquireSkillType.CLASS);
 		int count = 0;
 		int count = 0;
 		player.setLearningClass(classId);
 		player.setLearningClass(classId);
 		for (L2SkillLearn s : skills)
 		for (L2SkillLearn s : skills)

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2TrainerHealersInstance.java

@@ -143,7 +143,7 @@ public final class L2TrainerHealersInstance extends L2TrainerInstance
 	public static void showTransferSkillList(L2PcInstance player)
 	public static void showTransferSkillList(L2PcInstance player)
 	{
 	{
 		final List<L2SkillLearn> skills = SkillTreesData.getInstance().getAvailableTransferSkills(player);
 		final List<L2SkillLearn> skills = SkillTreesData.getInstance().getAvailableTransferSkills(player);
-		final AcquireSkillList asl = new AcquireSkillList(AcquireSkillType.Transfer);
+		final AcquireSkillList asl = new AcquireSkillList(AcquireSkillType.TRANSFER);
 		int count = 0;
 		int count = 0;
 		
 		
 		for (L2SkillLearn s : skills)
 		for (L2SkillLearn s : skills)

+ 0 - 368
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2TransformManagerInstance.java

@@ -1,368 +0,0 @@
-/*
- * Copyright (C) 2004-2013 L2J Server
- * 
- * This file is part of L2J Server.
- * 
- * L2J Server is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- * 
- * L2J Server is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-package com.l2jserver.gameserver.model.actor.instance;
-
-import java.util.List;
-
-import com.l2jserver.Config;
-import com.l2jserver.gameserver.datatables.MultiSell;
-import com.l2jserver.gameserver.datatables.SkillTable;
-import com.l2jserver.gameserver.datatables.SkillTreesData;
-import com.l2jserver.gameserver.instancemanager.QuestManager;
-import com.l2jserver.gameserver.model.L2SkillLearn;
-import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
-import com.l2jserver.gameserver.model.base.AcquireSkillType;
-import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
-import com.l2jserver.gameserver.model.quest.QuestState;
-import com.l2jserver.gameserver.model.skills.L2Skill;
-import com.l2jserver.gameserver.network.SystemMessageId;
-import com.l2jserver.gameserver.network.serverpackets.AcquireSkillList;
-import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
-import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
-import com.l2jserver.gameserver.util.Util;
-
-/**
- * This class manage the Transformation Master:<br>
- * Sub-Class Certification system, skill learning and certification cancelling.<br>
- * Transformation skill learning and transformation buying.
- * @author Zoey76
- */
-public final class L2TransformManagerInstance extends L2MerchantInstance
-{
-	private static final String htmlFolder = "data/html/masterTransformation/";
-	
-	public static final String[] _questVarNames =
-	{
-		"EmergentAbility65-",
-		"EmergentAbility70-",
-		"ClassAbility75-",
-		"ClassAbility80-"
-	};
-	
-	private static final int[] _itemsIds =
-	{
-		10280,
-		10281,
-		10282,
-		10283,
-		10284,
-		10285,
-		10286,
-		10287,
-		10288,
-		10289,
-		10290,
-		10291,
-		10292,
-		10293,
-		10294,
-		10612
-	};
-	
-	public L2TransformManagerInstance(int objectId, L2NpcTemplate template)
-	{
-		super(objectId, template);
-		setInstanceType(InstanceType.L2TransformManagerInstance);
-	}
-	
-	@Override
-	public String getHtmlPath(int npcId, int val)
-	{
-		return htmlFolder + "master_transformation001.htm";
-	}
-	
-	@Override
-	public void onBypassFeedback(L2PcInstance player, String command)
-	{
-		if (command.startsWith("LearnTransformationSkill"))
-		{
-			if (canTransform(player))
-			{
-				showTransformSkillList(player);
-			}
-			else
-			{
-				final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-				html.setFile(player.getHtmlPrefix(), htmlFolder + "master_transformation003.htm");
-				player.sendPacket(html);
-			}
-			return;
-		}
-		else if (command.startsWith("BuyTransformationItems"))
-		{
-			if (canTransform(player))
-			{
-				MultiSell.getInstance().separateAndSend(32323001, player, this, false);
-			}
-			else
-			{
-				NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-				html.setFile(player.getHtmlPrefix(), htmlFolder + "master_transformation004.htm");
-				player.sendPacket(html);
-			}
-			return;
-		}
-		else if (command.startsWith("LearnSubClassSkill"))
-		{
-			if (!canTransform(player))
-			{
-				NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-				html.setFile(player.getHtmlPrefix(), htmlFolder + "master_transformation004.htm");
-				player.sendPacket(html);
-				return;
-			}
-			if (player.isSubClassActive())
-			{
-				NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-				html.setFile(player.getHtmlPrefix(), htmlFolder + "master_transformation008.htm");
-				player.sendPacket(html);
-			}
-			else
-			{
-				boolean hasItems = false;
-				for (int i : _itemsIds)
-				{
-					if (player.getInventory().getItemByItemId(i) != null)
-					{
-						hasItems = true;
-						break;
-					}
-				}
-				if (hasItems)
-				{
-					showSubClassSkillList(player);
-				}
-				else
-				{
-					final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-					html.setFile(player.getHtmlPrefix(), htmlFolder + "master_transformation008.htm");
-					player.sendPacket(html);
-				}
-			}
-			return;
-		}
-		else if (command.startsWith("CancelCertification"))
-		{
-			final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-			if (player.getSubClasses().size() == 0)
-			{
-				html.setFile(player.getHtmlPrefix(), htmlFolder + "master_transformation007.htm");
-			}
-			else if (player.isSubClassActive())
-			{
-				html.setFile(player.getHtmlPrefix(), htmlFolder + "master_transformation008.htm");
-			}
-			else if (player.getAdena() < Config.FEE_DELETE_SUBCLASS_SKILLS)
-			{
-				html.setFile(player.getHtmlPrefix(), htmlFolder + "master_transformation008no.htm");
-			}
-			else
-			{
-				QuestState st = player.getQuestState("SubClassSkills");
-				if (st == null)
-				{
-					st = QuestManager.getInstance().getQuest("SubClassSkills").newQuestState(player);
-				}
-				
-				int activeCertifications = 0;
-				for (String varName : _questVarNames)
-				{
-					for (int i = 1; i <= Config.MAX_SUBCLASS; i++)
-					{
-						String qvar = st.getGlobalQuestVar(varName + i);
-						if (!qvar.isEmpty() && (qvar.endsWith(";") || !qvar.equals("0")))
-						{
-							activeCertifications++;
-						}
-					}
-				}
-				if (activeCertifications == 0)
-				{
-					html.setFile(player.getHtmlPrefix(), htmlFolder + "master_transformation010no.htm");
-				}
-				else
-				{
-					for (String varName : _questVarNames)
-					{
-						for (int i = 1; i <= Config.MAX_SUBCLASS; i++)
-						{
-							final String qvarName = varName + i;
-							final String qvar = st.getGlobalQuestVar(qvarName);
-							if (qvar.endsWith(";"))
-							{
-								final String skillIdVar = qvar.replace(";", "");
-								if (Util.isDigit(skillIdVar))
-								{
-									int skillId = Integer.parseInt(skillIdVar);
-									final L2Skill sk = SkillTable.getInstance().getInfo(skillId, 1);
-									if (sk != null)
-									{
-										player.removeSkill(sk);
-										st.saveGlobalQuestVar(qvarName, "0");
-									}
-								}
-								else
-								{
-									_log.warning("Invalid Sub-Class Skill Id: " + skillIdVar + " for player " + player.getName() + "!");
-								}
-							}
-							else if (!qvar.isEmpty() && !qvar.equals("0"))
-							{
-								if (Util.isDigit(qvar))
-								{
-									final int itemObjId = Integer.parseInt(qvar);
-									L2ItemInstance itemInstance = player.getInventory().getItemByObjectId(itemObjId);
-									if (itemInstance != null)
-									{
-										player.destroyItem("CancelCertification", itemObjId, 1, player, false);
-									}
-									else
-									{
-										itemInstance = player.getWarehouse().getItemByObjectId(itemObjId);
-										if (itemInstance != null)
-										{
-											_log.warning("Somehow " + player.getName() + " put a certification book into warehouse!");
-											player.getWarehouse().destroyItem("CancelCertification", itemInstance, 1, player, false);
-										}
-										else
-										{
-											_log.warning("Somehow " + player.getName() + " deleted a certification book!");
-										}
-									}
-									st.saveGlobalQuestVar(qvarName, "0");
-								}
-								else
-								{
-									_log.warning("Invalid item object Id: " + qvar + " for player " + player.getName() + "!");
-								}
-							}
-						}
-					}
-					
-					player.reduceAdena("Cleanse", Config.FEE_DELETE_SUBCLASS_SKILLS, this, true);
-					html.setFile(player.getHtmlPrefix(), htmlFolder + "master_transformation009no.htm");
-					player.sendSkillList();
-				}
-				
-				// Let's consume all certification books, even those not present in database.
-				L2ItemInstance itemInstance = null;
-				for (int itemId : _itemsIds)
-				{
-					itemInstance = player.getInventory().getItemByItemId(itemId);
-					if (itemInstance != null)
-					{
-						_log.warning(getClass().getName() + ": player " + player + " had 'extra' certification skill books while cancelling sub-class certifications!");
-						player.destroyItem("CancelCertificationExtraBooks", itemInstance, this, false);
-					}
-				}
-			}
-			player.sendPacket(html);
-			return;
-		}
-		super.onBypassFeedback(player, command);
-	}
-	
-	// Transformations:
-	/**
-	 * @param player the player to verify.
-	 * @return {code true} if {code player} meets the required conditions to learn a transformation.
-	 */
-	public static boolean canTransform(L2PcInstance player)
-	{
-		if (Config.ALLOW_TRANSFORM_WITHOUT_QUEST)
-		{
-			return true;
-		}
-		final QuestState st = player.getQuestState("Q00136_MoreThanMeetsTheEye");
-		if ((st != null) && st.isCompleted())
-		{
-			return true;
-		}
-		return false;
-	}
-	
-	/**
-	 * This displays Transformation Skill List to the player.
-	 * @param player the active character.
-	 */
-	public static void showTransformSkillList(L2PcInstance player)
-	{
-		final List<L2SkillLearn> skills = SkillTreesData.getInstance().getAvailableTransformSkills(player);
-		final AcquireSkillList asl = new AcquireSkillList(AcquireSkillType.Transform);
-		int counts = 0;
-		
-		for (L2SkillLearn s : skills)
-		{
-			if (SkillTable.getInstance().getInfo(s.getSkillId(), s.getSkillLevel()) != null)
-			{
-				counts++;
-				asl.addSkill(s.getSkillId(), s.getSkillLevel(), s.getSkillLevel(), s.getLevelUpSp(), 0);
-			}
-		}
-		
-		if (counts == 0)
-		{
-			final int minlevel = SkillTreesData.getInstance().getMinLevelForNewSkill(player, SkillTreesData.getInstance().getTransformSkillTree());
-			if (minlevel > 0)
-			{
-				// No more skills to learn, come back when you level.
-				final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.DO_NOT_HAVE_FURTHER_SKILLS_TO_LEARN_S1);
-				sm.addNumber(minlevel);
-				player.sendPacket(sm);
-			}
-			else
-			{
-				player.sendPacket(SystemMessageId.NO_MORE_SKILLS_TO_LEARN);
-			}
-		}
-		else
-		{
-			player.sendPacket(asl);
-		}
-	}
-	
-	// SubClass:
-	/**
-	 * This displays Sub-Class Skill List to the player.
-	 * @param player the active character.
-	 */
-	public static void showSubClassSkillList(L2PcInstance player)
-	{
-		final List<L2SkillLearn> subClassSkills = SkillTreesData.getInstance().getAvailableSubClassSkills(player);
-		final AcquireSkillList asl = new AcquireSkillList(AcquireSkillType.SubClass);
-		int count = 0;
-		
-		for (L2SkillLearn s : subClassSkills)
-		{
-			if (SkillTable.getInstance().getInfo(s.getSkillId(), s.getSkillLevel()) != null)
-			{
-				count++;
-				asl.addSkill(s.getSkillId(), s.getSkillLevel(), s.getSkillLevel(), 0, 0);
-			}
-		}
-		if (count > 0)
-		{
-			player.sendPacket(asl);
-		}
-		else
-		{
-			player.sendPacket(SystemMessageId.NO_MORE_SKILLS_TO_LEARN);
-		}
-	}
-}

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2VillageMasterInstance.java

@@ -1182,7 +1182,7 @@ public class L2VillageMasterInstance extends L2NpcInstance
 		}
 		}
 		
 		
 		final List<L2SkillLearn> skills = SkillTreesData.getInstance().getAvailablePledgeSkills(player.getClan());
 		final List<L2SkillLearn> skills = SkillTreesData.getInstance().getAvailablePledgeSkills(player.getClan());
-		final AcquireSkillList asl = new AcquireSkillList(AcquireSkillType.Pledge);
+		final AcquireSkillList asl = new AcquireSkillList(AcquireSkillType.PLEDGE);
 		int counts = 0;
 		int counts = 0;
 		
 		
 		for (L2SkillLearn s : skills)
 		for (L2SkillLearn s : skills)

+ 14 - 9
L2J_Server_BETA/java/com/l2jserver/gameserver/model/base/AcquireSkillType.java

@@ -19,17 +19,22 @@
 package com.l2jserver.gameserver.model.base;
 package com.l2jserver.gameserver.model.base;
 
 
 /**
 /**
- * Enumerate containing learning skill types.
+ * Learning skill types.
  * @author Zoey76
  * @author Zoey76
  */
  */
 public enum AcquireSkillType
 public enum AcquireSkillType
 {
 {
-	Class,
-	Fishing,
-	Pledge,
-	SubPledge,
-	Transform,
-	Transfer,
-	SubClass,
-	Collect
+	CLASS,
+	FISHING,
+	PLEDGE,
+	SUBPLEDGE,
+	TRANSFORM,
+	TRANSFER,
+	SUBCLASS,
+	COLLECT;
+	
+	public static AcquireSkillType getAcquireSkillType(int id)
+	{
+		return values()[id];
+	}
 }
 }

+ 46 - 44
L2J_Server_BETA/java/com/l2jserver/gameserver/model/quest/Quest.java

@@ -59,6 +59,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2TrapInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2TrapInstance;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
+import com.l2jserver.gameserver.model.base.AcquireSkillType;
 import com.l2jserver.gameserver.model.entity.Instance;
 import com.l2jserver.gameserver.model.entity.Instance;
 import com.l2jserver.gameserver.model.holders.ItemHolder;
 import com.l2jserver.gameserver.model.holders.ItemHolder;
 import com.l2jserver.gameserver.model.interfaces.IL2Procedure;
 import com.l2jserver.gameserver.model.interfaces.IL2Procedure;
@@ -836,9 +837,10 @@ public class Quest extends ManagedScript
 	}
 	}
 	
 	
 	/**
 	/**
-	 * @param npc
-	 * @param player
-	 * @param skill
+	 * Notify the quest engine that an skill info has been acquired.
+	 * @param npc the NPC
+	 * @param player the player
+	 * @param skill the skill
 	 */
 	 */
 	public final void notifyAcquireSkillInfo(L2Npc npc, L2PcInstance player, L2Skill skill)
 	public final void notifyAcquireSkillInfo(L2Npc npc, L2PcInstance player, L2Skill skill)
 	{
 	{
@@ -855,16 +857,18 @@ public class Quest extends ManagedScript
 	}
 	}
 	
 	
 	/**
 	/**
-	 * @param npc
-	 * @param player
-	 * @param skill
+	 * Notify the quest engine that an skill has been acquired.
+	 * @param npc the NPC
+	 * @param player the player
+	 * @param skill the skill
+	 * @param type the skill learn type
 	 */
 	 */
-	public final void notifyAcquireSkill(L2Npc npc, L2PcInstance player, L2Skill skill)
+	public final void notifyAcquireSkill(L2Npc npc, L2PcInstance player, L2Skill skill, AcquireSkillType type)
 	{
 	{
 		String res = null;
 		String res = null;
 		try
 		try
 		{
 		{
-			res = onAcquireSkill(npc, player, skill);
+			res = onAcquireSkill(npc, player, skill, type);
 		}
 		}
 		catch (Exception e)
 		catch (Exception e)
 		{
 		{
@@ -1309,8 +1313,7 @@ public class Quest extends ManagedScript
 	}
 	}
 	
 	
 	/**
 	/**
-	 * This function is called whenever a player request a skill info.<br>
-	 * TODO: Re-implement, since Skill Trees rework it's support was removed.
+	 * This function is called whenever a player request a skill info.
 	 * @param npc this parameter contains a reference to the exact instance of the NPC that the player requested the skill info.
 	 * @param npc this parameter contains a reference to the exact instance of the NPC that the player requested the skill info.
 	 * @param player this parameter contains a reference to the exact instance of the player who requested the skill info.
 	 * @param player this parameter contains a reference to the exact instance of the player who requested the skill info.
 	 * @param skill this parameter contains a reference to the skill that the player requested its info.
 	 * @param skill this parameter contains a reference to the skill that the player requested its info.
@@ -1327,9 +1330,10 @@ public class Quest extends ManagedScript
 	 * @param npc this parameter contains a reference to the exact instance of the NPC that the player requested the skill.
 	 * @param npc this parameter contains a reference to the exact instance of the NPC that the player requested the skill.
 	 * @param player this parameter contains a reference to the exact instance of the player who requested the skill.
 	 * @param player this parameter contains a reference to the exact instance of the player who requested the skill.
 	 * @param skill this parameter contains a reference to the skill that the player requested.
 	 * @param skill this parameter contains a reference to the skill that the player requested.
+	 * @param type the skill learn type
 	 * @return
 	 * @return
 	 */
 	 */
-	public String onAcquireSkill(L2Npc npc, L2PcInstance player, L2Skill skill)
+	public String onAcquireSkill(L2Npc npc, L2PcInstance player, L2Skill skill, AcquireSkillType type)
 	{
 	{
 		return null;
 		return null;
 	}
 	}
@@ -2623,7 +2627,7 @@ public class Quest extends ManagedScript
 	 * @param cha
 	 * @param cha
 	 * @return instance of newly spawned npc
 	 * @return instance of newly spawned npc
 	 */
 	 */
-	public L2Npc addSpawn(int npcId, L2Character cha)
+	public static L2Npc addSpawn(int npcId, L2Character cha)
 	{
 	{
 		return addSpawn(npcId, cha.getX(), cha.getY(), cha.getZ(), cha.getHeading(), false, 0, false, 0);
 		return addSpawn(npcId, cha.getX(), cha.getY(), cha.getZ(), cha.getHeading(), false, 0, false, 0);
 	}
 	}
@@ -2635,7 +2639,7 @@ public class Quest extends ManagedScript
 	 * @param isSummonSpawn
 	 * @param isSummonSpawn
 	 * @return instance of newly spawned npc with summon animation
 	 * @return instance of newly spawned npc with summon animation
 	 */
 	 */
-	public L2Npc addSpawn(int npcId, L2Character cha, boolean isSummonSpawn)
+	public static L2Npc addSpawn(int npcId, L2Character cha, boolean isSummonSpawn)
 	{
 	{
 		return addSpawn(npcId, cha.getX(), cha.getY(), cha.getZ(), cha.getHeading(), false, 0, isSummonSpawn, 0);
 		return addSpawn(npcId, cha.getX(), cha.getY(), cha.getZ(), cha.getHeading(), false, 0, isSummonSpawn, 0);
 	}
 	}
@@ -2650,7 +2654,7 @@ public class Quest extends ManagedScript
 	 * @param despawnDelay
 	 * @param despawnDelay
 	 * @return
 	 * @return
 	 */
 	 */
-	public L2Npc addSpawn(int npcId, int x, int y, int z, int heading, boolean randomOffSet, long despawnDelay)
+	public static L2Npc addSpawn(int npcId, int x, int y, int z, int heading, boolean randomOffSet, long despawnDelay)
 	{
 	{
 		return addSpawn(npcId, x, y, z, heading, randomOffSet, despawnDelay, false, 0);
 		return addSpawn(npcId, x, y, z, heading, randomOffSet, despawnDelay, false, 0);
 	}
 	}
@@ -2662,7 +2666,7 @@ public class Quest extends ManagedScript
 	 * @param despawnDelay
 	 * @param despawnDelay
 	 * @return
 	 * @return
 	 */
 	 */
-	public L2Npc addSpawn(int npcId, Location loc, boolean randomOffSet, long despawnDelay)
+	public static L2Npc addSpawn(int npcId, Location loc, boolean randomOffSet, long despawnDelay)
 	{
 	{
 		return addSpawn(npcId, loc.getX(), loc.getY(), loc.getZ(), loc.getHeading(), randomOffSet, despawnDelay, false, 0);
 		return addSpawn(npcId, loc.getX(), loc.getY(), loc.getZ(), loc.getHeading(), randomOffSet, despawnDelay, false, 0);
 	}
 	}
@@ -2678,7 +2682,7 @@ public class Quest extends ManagedScript
 	 * @param isSummonSpawn
 	 * @param isSummonSpawn
 	 * @return
 	 * @return
 	 */
 	 */
-	public L2Npc addSpawn(int npcId, int x, int y, int z, int heading, boolean randomOffset, long despawnDelay, boolean isSummonSpawn)
+	public static L2Npc addSpawn(int npcId, int x, int y, int z, int heading, boolean randomOffset, long despawnDelay, boolean isSummonSpawn)
 	{
 	{
 		return addSpawn(npcId, x, y, z, heading, randomOffset, despawnDelay, isSummonSpawn, 0);
 		return addSpawn(npcId, x, y, z, heading, randomOffset, despawnDelay, isSummonSpawn, 0);
 	}
 	}
@@ -2691,7 +2695,7 @@ public class Quest extends ManagedScript
 	 * @param isSummonSpawn
 	 * @param isSummonSpawn
 	 * @return
 	 * @return
 	 */
 	 */
-	public L2Npc addSpawn(int npcId, Location loc, boolean randomOffset, long despawnDelay, boolean isSummonSpawn)
+	public static L2Npc addSpawn(int npcId, Location loc, boolean randomOffset, long despawnDelay, boolean isSummonSpawn)
 	{
 	{
 		return addSpawn(npcId, loc.getX(), loc.getY(), loc.getZ(), loc.getHeading(), randomOffset, despawnDelay, isSummonSpawn, 0);
 		return addSpawn(npcId, loc.getX(), loc.getY(), loc.getZ(), loc.getHeading(), randomOffset, despawnDelay, isSummonSpawn, 0);
 	}
 	}
@@ -2705,7 +2709,7 @@ public class Quest extends ManagedScript
 	 * @param instanceId
 	 * @param instanceId
 	 * @return
 	 * @return
 	 */
 	 */
-	public L2Npc addSpawn(int npcId, Location loc, boolean randomOffset, long despawnDelay, boolean isSummonSpawn, int instanceId)
+	public static L2Npc addSpawn(int npcId, Location loc, boolean randomOffset, long despawnDelay, boolean isSummonSpawn, int instanceId)
 	{
 	{
 		return addSpawn(npcId, loc.getX(), loc.getY(), loc.getZ(), loc.getHeading(), randomOffset, despawnDelay, isSummonSpawn, instanceId);
 		return addSpawn(npcId, loc.getX(), loc.getY(), loc.getZ(), loc.getHeading(), randomOffset, despawnDelay, isSummonSpawn, instanceId);
 	}
 	}
@@ -2722,7 +2726,7 @@ public class Quest extends ManagedScript
 	 * @param instanceId
 	 * @param instanceId
 	 * @return
 	 * @return
 	 */
 	 */
-	public L2Npc addSpawn(int npcId, int x, int y, int z, int heading, boolean randomOffset, long despawnDelay, boolean isSummonSpawn, int instanceId)
+	public static L2Npc addSpawn(int npcId, int x, int y, int z, int heading, boolean randomOffset, long despawnDelay, boolean isSummonSpawn, int instanceId)
 	{
 	{
 		L2Npc result = null;
 		L2Npc result = null;
 		try
 		try
@@ -2975,7 +2979,7 @@ public class Quest extends ManagedScript
 	 * @param itemId the Id of the item whose amount to get
 	 * @param itemId the Id of the item whose amount to get
 	 * @return the amount of the specified item in player's inventory
 	 * @return the amount of the specified item in player's inventory
 	 */
 	 */
-	public long getQuestItemsCount(L2PcInstance player, int itemId)
+	public static long getQuestItemsCount(L2PcInstance player, int itemId)
 	{
 	{
 		return player.getInventory().getInventoryItemCount(itemId, -1);
 		return player.getInventory().getInventoryItemCount(itemId, -1);
 	}
 	}
@@ -3017,7 +3021,7 @@ public class Quest extends ManagedScript
 	 * @param itemId the Id of the item to check for
 	 * @param itemId the Id of the item to check for
 	 * @return {@code true} if the item exists in player's inventory, {@code false} otherwise
 	 * @return {@code true} if the item exists in player's inventory, {@code false} otherwise
 	 */
 	 */
-	public boolean hasQuestItems(L2PcInstance player, int itemId)
+	public static boolean hasQuestItems(L2PcInstance player, int itemId)
 	{
 	{
 		return player.getInventory().getItemByItemId(itemId) != null;
 		return player.getInventory().getItemByItemId(itemId) != null;
 	}
 	}
@@ -3028,7 +3032,7 @@ public class Quest extends ManagedScript
 	 * @param itemIds a list of item Ids to check for
 	 * @param itemIds a list of item Ids to check for
 	 * @return {@code true} if all items exist in player's inventory, {@code false} otherwise
 	 * @return {@code true} if all items exist in player's inventory, {@code false} otherwise
 	 */
 	 */
-	public boolean hasQuestItems(L2PcInstance player, int... itemIds)
+	public static boolean hasQuestItems(L2PcInstance player, int... itemIds)
 	{
 	{
 		final PcInventory inv = player.getInventory();
 		final PcInventory inv = player.getInventory();
 		for (int itemId : itemIds)
 		for (int itemId : itemIds)
@@ -3066,9 +3070,9 @@ public class Quest extends ManagedScript
 	 * @param itemId the Id of the item whose enchantment level to get
 	 * @param itemId the Id of the item whose enchantment level to get
 	 * @return the enchantment level of the item or 0 if the item was not found
 	 * @return the enchantment level of the item or 0 if the item was not found
 	 */
 	 */
-	public int getEnchantLevel(L2PcInstance player, int itemId)
+	public static int getEnchantLevel(L2PcInstance player, int itemId)
 	{
 	{
-		L2ItemInstance enchantedItem = player.getInventory().getItemByItemId(itemId);
+		final L2ItemInstance enchantedItem = player.getInventory().getItemByItemId(itemId);
 		if (enchantedItem == null)
 		if (enchantedItem == null)
 		{
 		{
 			return 0;
 			return 0;
@@ -3100,15 +3104,14 @@ public class Quest extends ManagedScript
 	 * @param itemId the Id of the item to give
 	 * @param itemId the Id of the item to give
 	 * @param count the amount of items to give
 	 * @param count the amount of items to give
 	 */
 	 */
-	public void rewardItems(L2PcInstance player, int itemId, long count)
+	public static void rewardItems(L2PcInstance player, int itemId, long count)
 	{
 	{
 		if (count <= 0)
 		if (count <= 0)
 		{
 		{
 			return;
 			return;
 		}
 		}
 		
 		
-		L2ItemInstance _tmpItem = ItemTable.getInstance().createDummyItem(itemId);
-		
+		final L2ItemInstance _tmpItem = ItemTable.getInstance().createDummyItem(itemId);
 		if (_tmpItem == null)
 		if (_tmpItem == null)
 		{
 		{
 			return;
 			return;
@@ -3171,7 +3174,7 @@ public class Quest extends ManagedScript
 	 * @param item the item obtain by the player
 	 * @param item the item obtain by the player
 	 * @param count the item count
 	 * @param count the item count
 	 */
 	 */
-	private void sendItemGetMessage(L2PcInstance player, L2ItemInstance item, long count)
+	private static void sendItemGetMessage(L2PcInstance player, L2ItemInstance item, long count)
 	{
 	{
 		// If item for reward is gold, send message of gold reward to client
 		// If item for reward is gold, send message of gold reward to client
 		if (item.getItemId() == PcInventory.ADENA_ID)
 		if (item.getItemId() == PcInventory.ADENA_ID)
@@ -3230,7 +3233,7 @@ public class Quest extends ManagedScript
 	 * @param count
 	 * @param count
 	 * @param enchantlevel
 	 * @param enchantlevel
 	 */
 	 */
-	public void giveItems(L2PcInstance player, int itemId, long count, int enchantlevel)
+	public static void giveItems(L2PcInstance player, int itemId, long count, int enchantlevel)
 	{
 	{
 		if (count <= 0)
 		if (count <= 0)
 		{
 		{
@@ -3244,7 +3247,7 @@ public class Quest extends ManagedScript
 		}
 		}
 		
 		
 		// Add items to player's inventory
 		// Add items to player's inventory
-		L2ItemInstance item = player.getInventory().addItem("Quest", itemId, count, player, player.getTarget());
+		final L2ItemInstance item = player.getInventory().addItem("Quest", itemId, count, player, player.getTarget());
 		if (item == null)
 		if (item == null)
 		{
 		{
 			return;
 			return;
@@ -3266,7 +3269,7 @@ public class Quest extends ManagedScript
 	 * @param attributeId
 	 * @param attributeId
 	 * @param attributeLevel
 	 * @param attributeLevel
 	 */
 	 */
-	public void giveItems(L2PcInstance player, int itemId, long count, byte attributeId, int attributeLevel)
+	public static void giveItems(L2PcInstance player, int itemId, long count, byte attributeId, int attributeLevel)
 	{
 	{
 		if (count <= 0)
 		if (count <= 0)
 		{
 		{
@@ -3274,8 +3277,7 @@ public class Quest extends ManagedScript
 		}
 		}
 		
 		
 		// Add items to player's inventory
 		// Add items to player's inventory
-		L2ItemInstance item = player.getInventory().addItem("Quest", itemId, count, player, player.getTarget());
-		
+		final L2ItemInstance item = player.getInventory().addItem("Quest", itemId, count, player, player.getTarget());
 		if (item == null)
 		if (item == null)
 		{
 		{
 			return;
 			return;
@@ -3323,7 +3325,7 @@ public class Quest extends ManagedScript
 	 * @param sound
 	 * @param sound
 	 * @return
 	 * @return
 	 */
 	 */
-	public boolean dropQuestItems(L2PcInstance player, int itemId, int minCount, int maxCount, long neededCount, int dropChance, boolean sound)
+	public static boolean dropQuestItems(L2PcInstance player, int itemId, int minCount, int maxCount, long neededCount, int dropChance, boolean sound)
 	{
 	{
 		dropChance *= Config.RATE_QUEST_DROP / ((player.getParty() != null) ? player.getParty().getMemberCount() : 1);
 		dropChance *= Config.RATE_QUEST_DROP / ((player.getParty() != null) ? player.getParty().getMemberCount() : 1);
 		long currentCount = getQuestItemsCount(player, itemId);
 		long currentCount = getQuestItemsCount(player, itemId);
@@ -3394,10 +3396,10 @@ public class Quest extends ManagedScript
 	 * @param amount the amount to take
 	 * @param amount the amount to take
 	 * @return {@code true} if any items were taken, {@code false} otherwise
 	 * @return {@code true} if any items were taken, {@code false} otherwise
 	 */
 	 */
-	public boolean takeItems(L2PcInstance player, int itemId, long amount)
+	public static boolean takeItems(L2PcInstance player, int itemId, long amount)
 	{
 	{
 		// Get object item from player's inventory list
 		// Get object item from player's inventory list
-		L2ItemInstance item = player.getInventory().getItemByItemId(itemId);
+		final L2ItemInstance item = player.getInventory().getItemByItemId(itemId);
 		if (item == null)
 		if (item == null)
 		{
 		{
 			return false;
 			return false;
@@ -3412,7 +3414,7 @@ public class Quest extends ManagedScript
 		// Destroy the quantity of items wanted
 		// Destroy the quantity of items wanted
 		if (item.isEquipped())
 		if (item.isEquipped())
 		{
 		{
-			L2ItemInstance[] unequiped = player.getInventory().unEquipItemInBodySlotAndRecord(item.getItem().getBodyPart());
+			final L2ItemInstance[] unequiped = player.getInventory().unEquipItemInBodySlotAndRecord(item.getItem().getBodyPart());
 			InventoryUpdate iu = new InventoryUpdate();
 			InventoryUpdate iu = new InventoryUpdate();
 			for (L2ItemInstance itm : unequiped)
 			for (L2ItemInstance itm : unequiped)
 			{
 			{
@@ -3430,7 +3432,7 @@ public class Quest extends ManagedScript
 	 * @param holder
 	 * @param holder
 	 * @return {@code true} if any items were taken, {@code false} otherwise
 	 * @return {@code true} if any items were taken, {@code false} otherwise
 	 */
 	 */
-	protected boolean takeItems(L2PcInstance player, ItemHolder holder)
+	protected static boolean takeItems(L2PcInstance player, ItemHolder holder)
 	{
 	{
 		return takeItems(player, holder.getId(), holder.getCount());
 		return takeItems(player, holder.getId(), holder.getCount());
 	}
 	}
@@ -3442,7 +3444,7 @@ public class Quest extends ManagedScript
 	 * @param itemIds a list or an array of Ids of the items to take
 	 * @param itemIds a list or an array of Ids of the items to take
 	 * @return {@code true} if all items were taken, {@code false} otherwise
 	 * @return {@code true} if all items were taken, {@code false} otherwise
 	 */
 	 */
-	public boolean takeItems(L2PcInstance player, int amount, int... itemIds)
+	public static boolean takeItems(L2PcInstance player, int amount, int... itemIds)
 	{
 	{
 		boolean check = true;
 		boolean check = true;
 		if (itemIds != null)
 		if (itemIds != null)
@@ -3469,7 +3471,7 @@ public class Quest extends ManagedScript
 	 * @param player the player whom to send the packet
 	 * @param player the player whom to send the packet
 	 * @param sound the name of the sound to play
 	 * @param sound the name of the sound to play
 	 */
 	 */
-	public void playSound(L2PcInstance player, String sound)
+	public static void playSound(L2PcInstance player, String sound)
 	{
 	{
 		player.sendPacket(QuestSound.getSound(sound));
 		player.sendPacket(QuestSound.getSound(sound));
 	}
 	}
@@ -3479,7 +3481,7 @@ public class Quest extends ManagedScript
 	 * @param player the player whom to send the packet
 	 * @param player the player whom to send the packet
 	 * @param sound the {@link QuestSound} object of the sound to play
 	 * @param sound the {@link QuestSound} object of the sound to play
 	 */
 	 */
-	public void playSound(L2PcInstance player, QuestSound sound)
+	public static void playSound(L2PcInstance player, QuestSound sound)
 	{
 	{
 		player.sendPacket(sound.getPacket());
 		player.sendPacket(sound.getPacket());
 	}
 	}
@@ -3490,7 +3492,7 @@ public class Quest extends ManagedScript
 	 * @param exp the amount of EXP to give to the player
 	 * @param exp the amount of EXP to give to the player
 	 * @param sp the amount of SP to give to the player
 	 * @param sp the amount of SP to give to the player
 	 */
 	 */
-	public void addExpAndSp(L2PcInstance player, long exp, int sp)
+	public static void addExpAndSp(L2PcInstance player, long exp, int sp)
 	{
 	{
 		player.addExpAndSp((long) player.calcStat(Stats.EXPSP_RATE, exp * Config.RATE_QUEST_REWARD_XP, null, null), (int) player.calcStat(Stats.EXPSP_RATE, sp * Config.RATE_QUEST_REWARD_SP, null, null));
 		player.addExpAndSp((long) player.calcStat(Stats.EXPSP_RATE, exp * Config.RATE_QUEST_REWARD_XP, null, null), (int) player.calcStat(Stats.EXPSP_RATE, sp * Config.RATE_QUEST_REWARD_SP, null, null));
 	}
 	}
@@ -3533,7 +3535,7 @@ public class Quest extends ManagedScript
 	 * @param slot the location in the player's inventory to check
 	 * @param slot the location in the player's inventory to check
 	 * @return the Id of the item equipped in the specified inventory slot or 0 if the slot is empty or item is {@code null}.
 	 * @return the Id of the item equipped in the specified inventory slot or 0 if the slot is empty or item is {@code null}.
 	 */
 	 */
-	public int getItemEquipped(L2PcInstance player, int slot)
+	public static int getItemEquipped(L2PcInstance player, int slot)
 	{
 	{
 		return player.getInventory().getPaperdollItemId(slot);
 		return player.getInventory().getPaperdollItemId(slot);
 	}
 	}
@@ -3541,7 +3543,7 @@ public class Quest extends ManagedScript
 	/**
 	/**
 	 * @return the number of ticks from the {@link com.l2jserver.gameserver.GameTimeController}.
 	 * @return the number of ticks from the {@link com.l2jserver.gameserver.GameTimeController}.
 	 */
 	 */
-	public int getGameTicks()
+	public static int getGameTicks()
 	{
 	{
 		return GameTimeController.getInstance().getGameTicks();
 		return GameTimeController.getInstance().getGameTicks();
 	}
 	}

+ 14 - 23
L2J_Server_BETA/java/com/l2jserver/gameserver/model/quest/QuestState.java

@@ -613,7 +613,7 @@ public final class QuestState
 	 */
 	 */
 	public long getQuestItemsCount(int itemId)
 	public long getQuestItemsCount(int itemId)
 	{
 	{
-		return getQuest().getQuestItemsCount(getPlayer(), itemId);
+		return Quest.getQuestItemsCount(getPlayer(), itemId);
 	}
 	}
 	
 	
 	/**
 	/**
@@ -622,7 +622,7 @@ public final class QuestState
 	 */
 	 */
 	public boolean hasQuestItems(int itemId)
 	public boolean hasQuestItems(int itemId)
 	{
 	{
-		return getQuest().hasQuestItems(getPlayer(), itemId);
+		return Quest.hasQuestItems(getPlayer(), itemId);
 	}
 	}
 	
 	
 	/**
 	/**
@@ -631,7 +631,7 @@ public final class QuestState
 	 */
 	 */
 	public boolean hasQuestItems(int... itemIds)
 	public boolean hasQuestItems(int... itemIds)
 	{
 	{
-		return getQuest().hasQuestItems(getPlayer(), itemIds);
+		return Quest.hasQuestItems(getPlayer(), itemIds);
 	}
 	}
 	
 	
 	/**
 	/**
@@ -641,7 +641,7 @@ public final class QuestState
 	 */
 	 */
 	public int getEnchantLevel(int itemId)
 	public int getEnchantLevel(int itemId)
 	{
 	{
-		return getQuest().getEnchantLevel(getPlayer(), itemId);
+		return Quest.getEnchantLevel(getPlayer(), itemId);
 	}
 	}
 	
 	
 	/**
 	/**
@@ -661,7 +661,7 @@ public final class QuestState
 	 */
 	 */
 	public void rewardItems(int itemId, long count)
 	public void rewardItems(int itemId, long count)
 	{
 	{
-		getQuest().rewardItems(getPlayer(), itemId, count);
+		Quest.rewardItems(getPlayer(), itemId, count);
 	}
 	}
 	
 	
 	/**
 	/**
@@ -681,12 +681,12 @@ public final class QuestState
 	
 	
 	public void giveItems(int itemId, long count, int enchantlevel)
 	public void giveItems(int itemId, long count, int enchantlevel)
 	{
 	{
-		getQuest().giveItems(getPlayer(), itemId, count, enchantlevel);
+		Quest.giveItems(getPlayer(), itemId, count, enchantlevel);
 	}
 	}
 	
 	
 	public void giveItems(int itemId, long count, byte attributeId, int attributeLevel)
 	public void giveItems(int itemId, long count, byte attributeId, int attributeLevel)
 	{
 	{
-		getQuest().giveItems(getPlayer(), itemId, count, attributeId, attributeLevel);
+		Quest.giveItems(getPlayer(), itemId, count, attributeId, attributeLevel);
 	}
 	}
 	
 	
 	/**
 	/**
@@ -705,7 +705,7 @@ public final class QuestState
 	
 	
 	public boolean dropQuestItems(int itemId, int minCount, int maxCount, long neededCount, int dropChance, boolean sound)
 	public boolean dropQuestItems(int itemId, int minCount, int maxCount, long neededCount, int dropChance, boolean sound)
 	{
 	{
-		return getQuest().dropQuestItems(getPlayer(), itemId, minCount, maxCount, neededCount, dropChance, sound);
+		return Quest.dropQuestItems(getPlayer(), itemId, minCount, maxCount, neededCount, dropChance, sound);
 	}
 	}
 	
 	
 	// TODO: More radar functions need to be added when the radar class is complete.
 	// TODO: More radar functions need to be added when the radar class is complete.
@@ -739,7 +739,7 @@ public final class QuestState
 	 */
 	 */
 	public void takeItems(int itemId, long count)
 	public void takeItems(int itemId, long count)
 	{
 	{
-		getQuest().takeItems(getPlayer(), itemId, count);
+		Quest.takeItems(getPlayer(), itemId, count);
 	}
 	}
 	
 	
 	/**
 	/**
@@ -748,7 +748,7 @@ public final class QuestState
 	 */
 	 */
 	public void playSound(String sound)
 	public void playSound(String sound)
 	{
 	{
-		getQuest().playSound(getPlayer(), sound);
+		Quest.playSound(getPlayer(), sound);
 	}
 	}
 	
 	
 	/**
 	/**
@@ -757,7 +757,7 @@ public final class QuestState
 	 */
 	 */
 	public void playSound(QuestSound sound)
 	public void playSound(QuestSound sound)
 	{
 	{
-		getQuest().playSound(getPlayer(), sound);
+		Quest.playSound(getPlayer(), sound);
 	}
 	}
 	
 	
 	/**
 	/**
@@ -767,7 +767,7 @@ public final class QuestState
 	 */
 	 */
 	public void addExpAndSp(int exp, int sp)
 	public void addExpAndSp(int exp, int sp)
 	{
 	{
-		getQuest().addExpAndSp(getPlayer(), exp, sp);
+		Quest.addExpAndSp(getPlayer(), exp, sp);
 	}
 	}
 	
 	
 	/**
 	/**
@@ -776,16 +776,7 @@ public final class QuestState
 	 */
 	 */
 	public int getItemEquipped(int loc)
 	public int getItemEquipped(int loc)
 	{
 	{
-		return getQuest().getItemEquipped(getPlayer(), loc);
-	}
-	
-	/**
-	 * Return the number of ticks from the GameTimeController
-	 * @return int
-	 */
-	public int getGameTicks()
-	{
-		return getQuest().getGameTicks();
+		return Quest.getItemEquipped(getPlayer(), loc);
 	}
 	}
 	
 	
 	/**
 	/**
@@ -993,7 +984,7 @@ public final class QuestState
 	 */
 	 */
 	public L2Npc addSpawn(int npcId, int x, int y, int z, int heading, boolean randomOffset, int despawnDelay, boolean isSummonSpawn)
 	public L2Npc addSpawn(int npcId, int x, int y, int z, int heading, boolean randomOffset, int despawnDelay, boolean isSummonSpawn)
 	{
 	{
-		return getQuest().addSpawn(npcId, x, y, z, heading, randomOffset, despawnDelay, isSummonSpawn);
+		return Quest.addSpawn(npcId, x, y, z, heading, randomOffset, despawnDelay, isSummonSpawn);
 	}
 	}
 	
 	
 	/**
 	/**

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

@@ -30,13 +30,13 @@ import com.l2jserver.gameserver.model.actor.instance.L2FishermanInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2NpcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2NpcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2TrainerHealersInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2TrainerHealersInstance;
-import com.l2jserver.gameserver.model.actor.instance.L2TransformManagerInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2VillageMasterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2VillageMasterInstance;
 import com.l2jserver.gameserver.model.base.AcquireSkillType;
 import com.l2jserver.gameserver.model.base.AcquireSkillType;
 import com.l2jserver.gameserver.model.holders.ItemHolder;
 import com.l2jserver.gameserver.model.holders.ItemHolder;
 import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.Quest;
+import com.l2jserver.gameserver.model.quest.Quest.QuestEventType;
 import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.SystemMessageId;
@@ -48,15 +48,23 @@ import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.gameserver.util.Util;
 
 
 /**
 /**
+ * Request Acquire Skill client packet implementation.
  * @author Zoey76
  * @author Zoey76
  */
  */
 public final class RequestAcquireSkill extends L2GameClientPacket
 public final class RequestAcquireSkill extends L2GameClientPacket
 {
 {
 	private static final String _C__7C_REQUESTACQUIRESKILL = "[C] 7C RequestAcquireSkill";
 	private static final String _C__7C_REQUESTACQUIRESKILL = "[C] 7C RequestAcquireSkill";
+	private static final String[] QUEST_VAR_NAMES =
+	{
+		"EmergentAbility65-",
+		"EmergentAbility70-",
+		"ClassAbility75-",
+		"ClassAbility80-"
+	};
 	
 	
 	private int _id;
 	private int _id;
 	private int _level;
 	private int _level;
-	private int _skillType;
+	private AcquireSkillType _skillType;
 	private int _subType;
 	private int _subType;
 	
 	
 	@Override
 	@Override
@@ -64,8 +72,8 @@ public final class RequestAcquireSkill extends L2GameClientPacket
 	{
 	{
 		_id = readD();
 		_id = readD();
 		_level = readD();
 		_level = readD();
-		_skillType = readD();
-		if (_skillType == AcquireSkillType.SubPledge.ordinal())
+		_skillType = AcquireSkillType.getAcquireSkillType(readD());
+		if (_skillType == AcquireSkillType.SUBPLEDGE)
 		{
 		{
 			_subType = readD();
 			_subType = readD();
 		}
 		}
@@ -107,8 +115,7 @@ public final class RequestAcquireSkill extends L2GameClientPacket
 		
 		
 		// Hack check. Doesn't apply to all Skill Types
 		// Hack check. Doesn't apply to all Skill Types
 		final int prevSkillLevel = activeChar.getSkillLevel(_id);
 		final int prevSkillLevel = activeChar.getSkillLevel(_id);
-		final AcquireSkillType skillType = AcquireSkillType.values()[_skillType];
-		if ((prevSkillLevel > 0) && !((skillType == AcquireSkillType.Transfer) || (skillType == AcquireSkillType.SubPledge)))
+		if ((prevSkillLevel > 0) && !((_skillType == AcquireSkillType.TRANSFER) || (_skillType == AcquireSkillType.SUBPLEDGE)))
 		{
 		{
 			if (prevSkillLevel == _level)
 			if (prevSkillLevel == _level)
 			{
 			{
@@ -124,15 +131,15 @@ public final class RequestAcquireSkill extends L2GameClientPacket
 			}
 			}
 		}
 		}
 		
 		
-		final L2SkillLearn s = SkillTreesData.getInstance().getSkillLearn(skillType, _id, _level, activeChar);
+		final L2SkillLearn s = SkillTreesData.getInstance().getSkillLearn(_skillType, _id, _level, activeChar);
 		if (s == null)
 		if (s == null)
 		{
 		{
 			return;
 			return;
 		}
 		}
 		
 		
-		switch (skillType)
+		switch (_skillType)
 		{
 		{
-			case Class:
+			case CLASS:
 			{
 			{
 				if (checkPlayerSkill(activeChar, trainer, s))
 				if (checkPlayerSkill(activeChar, trainer, s))
 				{
 				{
@@ -140,10 +147,10 @@ public final class RequestAcquireSkill extends L2GameClientPacket
 				}
 				}
 				break;
 				break;
 			}
 			}
-			case Transform:
+			case TRANSFORM:
 			{
 			{
 				// Hack check.
 				// Hack check.
-				if (!L2TransformManagerInstance.canTransform(activeChar))
+				if (!canTransform(activeChar))
 				{
 				{
 					activeChar.sendPacket(SystemMessageId.NOT_COMPLETED_QUEST_FOR_SKILL_ACQUISITION);
 					activeChar.sendPacket(SystemMessageId.NOT_COMPLETED_QUEST_FOR_SKILL_ACQUISITION);
 					Util.handleIllegalPlayerAction(activeChar, "Player " + activeChar.getName() + " is requesting skill Id: " + _id + " level " + _level + " without required quests!", 0);
 					Util.handleIllegalPlayerAction(activeChar, "Player " + activeChar.getName() + " is requesting skill Id: " + _id + " level " + _level + " without required quests!", 0);
@@ -156,7 +163,7 @@ public final class RequestAcquireSkill extends L2GameClientPacket
 				}
 				}
 				break;
 				break;
 			}
 			}
-			case Fishing:
+			case FISHING:
 			{
 			{
 				if (checkPlayerSkill(activeChar, trainer, s))
 				if (checkPlayerSkill(activeChar, trainer, s))
 				{
 				{
@@ -164,7 +171,7 @@ public final class RequestAcquireSkill extends L2GameClientPacket
 				}
 				}
 				break;
 				break;
 			}
 			}
-			case Pledge:
+			case PLEDGE:
 			{
 			{
 				if (!activeChar.isClanLeader())
 				if (!activeChar.isClanLeader())
 				{
 				{
@@ -215,7 +222,7 @@ public final class RequestAcquireSkill extends L2GameClientPacket
 				}
 				}
 				break;
 				break;
 			}
 			}
-			case SubPledge:
+			case SUBPLEDGE:
 			{
 			{
 				if (!activeChar.isClanLeader())
 				if (!activeChar.isClanLeader())
 				{
 				{
@@ -275,7 +282,7 @@ public final class RequestAcquireSkill extends L2GameClientPacket
 				}
 				}
 				break;
 				break;
 			}
 			}
-			case Transfer:
+			case TRANSFER:
 			{
 			{
 				if (checkPlayerSkill(activeChar, trainer, s))
 				if (checkPlayerSkill(activeChar, trainer, s))
 				{
 				{
@@ -283,7 +290,7 @@ public final class RequestAcquireSkill extends L2GameClientPacket
 				}
 				}
 				break;
 				break;
 			}
 			}
-			case SubClass:
+			case SUBCLASS:
 			{
 			{
 				// Hack check.
 				// Hack check.
 				if (activeChar.isSubClassActive())
 				if (activeChar.isSubClassActive())
@@ -308,7 +315,7 @@ public final class RequestAcquireSkill extends L2GameClientPacket
 					}
 					}
 				}
 				}
 				
 				
-				for (String varName : L2TransformManagerInstance._questVarNames)
+				for (String varName : QUEST_VAR_NAMES)
 				{
 				{
 					for (int i = 1; i <= Config.MAX_SUBCLASS; i++)
 					for (int i = 1; i <= Config.MAX_SUBCLASS; i++)
 					{
 					{
@@ -353,7 +360,7 @@ public final class RequestAcquireSkill extends L2GameClientPacket
 				showSkillList(trainer, activeChar);
 				showSkillList(trainer, activeChar);
 				break;
 				break;
 			}
 			}
-			case Collect:
+			case COLLECT:
 			{
 			{
 				if (checkPlayerSkill(activeChar, trainer, s))
 				if (checkPlayerSkill(activeChar, trainer, s))
 				{
 				{
@@ -491,16 +498,26 @@ public final class RequestAcquireSkill extends L2GameClientPacket
 		{
 		{
 			player.sendPacket(new ExStorageMaxCount(player));
 			player.sendPacket(new ExStorageMaxCount(player));
 		}
 		}
+		// Notify scripts of the skill learn.
+		for (Quest quest : trainer.getTemplate().getEventQuests(QuestEventType.ON_SKILL_LEARN))
+		{
+			quest.notifyAcquireSkill(trainer, player, skill, _skillType);
+		}
 	}
 	}
 	
 	
 	/**
 	/**
 	 * Wrapper for returning the skill list to the player after it's done with current skill.
 	 * Wrapper for returning the skill list to the player after it's done with current skill.
-	 * @param trainer the Npc which the {@code player} is interacting.
-	 * @param player the active character.
+	 * @param trainer the Npc which the {@code player} is interacting
+	 * @param player the active character
 	 */
 	 */
 	private void showSkillList(L2Npc trainer, L2PcInstance player)
 	private void showSkillList(L2Npc trainer, L2PcInstance player)
 	{
 	{
-		if ((trainer instanceof L2TrainerHealersInstance) && (_skillType == AcquireSkillType.Transfer.ordinal()))
+		if ((_skillType == AcquireSkillType.TRANSFORM) || (_skillType == AcquireSkillType.SUBCLASS))
+		{
+			// Managed in Datapack.
+			return;
+		}
+		if ((trainer instanceof L2TrainerHealersInstance) && (_skillType == AcquireSkillType.TRANSFER))
 		{
 		{
 			L2TrainerHealersInstance.showTransferSkillList(player);
 			L2TrainerHealersInstance.showTransferSkillList(player);
 		}
 		}
@@ -508,20 +525,27 @@ public final class RequestAcquireSkill extends L2GameClientPacket
 		{
 		{
 			L2FishermanInstance.showFishSkillList(player);
 			L2FishermanInstance.showFishSkillList(player);
 		}
 		}
-		else if ((trainer instanceof L2TransformManagerInstance) && (_skillType == AcquireSkillType.Transform.ordinal()))
-		{
-			L2TransformManagerInstance.showTransformSkillList(player);
-		}
-		else if ((trainer instanceof L2TransformManagerInstance) && (_skillType == AcquireSkillType.SubClass.ordinal()))
-		{
-			L2TransformManagerInstance.showSubClassSkillList(player);
-		}
 		else
 		else
 		{
 		{
 			L2NpcInstance.showSkillList(player, trainer, player.getLearningClass());
 			L2NpcInstance.showSkillList(player, trainer, player.getLearningClass());
 		}
 		}
 	}
 	}
 	
 	
+	/**
+	 * Verify if the player can transform.
+	 * @param player the player to verify
+	 * @return {@code true} if the player meets the required conditions to learn a transformation, {@code false} otherwise
+	 */
+	public static boolean canTransform(L2PcInstance player)
+	{
+		if (Config.ALLOW_TRANSFORM_WITHOUT_QUEST)
+		{
+			return true;
+		}
+		final QuestState st = player.getQuestState("Q00136_MoreThanMeetsTheEye");
+		return (st != null) && st.isCompleted();
+	}
+	
 	@Override
 	@Override
 	public String getType()
 	public String getType()
 	{
 	{

+ 22 - 43
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestAcquireSkillInfo.java

@@ -30,6 +30,7 @@ import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.network.serverpackets.AcquireSkillInfo;
 import com.l2jserver.gameserver.network.serverpackets.AcquireSkillInfo;
 
 
 /**
 /**
+ * Request Acquire Skill Info client packet implementation.
  * @author Zoey76
  * @author Zoey76
  */
  */
 public final class RequestAcquireSkillInfo extends L2GameClientPacket
 public final class RequestAcquireSkillInfo extends L2GameClientPacket
@@ -38,14 +39,14 @@ public final class RequestAcquireSkillInfo extends L2GameClientPacket
 	
 	
 	private int _id;
 	private int _id;
 	private int _level;
 	private int _level;
-	private int _skillType;
+	private AcquireSkillType _skillType;
 	
 	
 	@Override
 	@Override
 	protected void readImpl()
 	protected void readImpl()
 	{
 	{
 		_id = readD();
 		_id = readD();
 		_level = readD();
 		_level = readD();
-		_skillType = readD();
+		_skillType = AcquireSkillType.getAcquireSkillType(readD());
 	}
 	}
 	
 	
 	@Override
 	@Override
@@ -83,8 +84,7 @@ public final class RequestAcquireSkillInfo extends L2GameClientPacket
 		
 		
 		// Hack check. Doesn't apply to all Skill Types
 		// Hack check. Doesn't apply to all Skill Types
 		final int prevSkillLevel = activeChar.getSkillLevel(_id);
 		final int prevSkillLevel = activeChar.getSkillLevel(_id);
-		final AcquireSkillType skillType = AcquireSkillType.values()[_skillType];
-		if ((prevSkillLevel > 0) && !((skillType == AcquireSkillType.Transfer) || (skillType == AcquireSkillType.SubPledge)))
+		if ((prevSkillLevel > 0) && !((_skillType == AcquireSkillType.TRANSFER) || (_skillType == AcquireSkillType.SUBPLEDGE)))
 		{
 		{
 			if (prevSkillLevel == _level)
 			if (prevSkillLevel == _level)
 			{
 			{
@@ -96,69 +96,48 @@ public final class RequestAcquireSkillInfo extends L2GameClientPacket
 			}
 			}
 		}
 		}
 		
 		
-		final L2SkillLearn s = SkillTreesData.getInstance().getSkillLearn(skillType, _id, _level, activeChar);
+		final L2SkillLearn s = SkillTreesData.getInstance().getSkillLearn(_skillType, _id, _level, activeChar);
 		if (s == null)
 		if (s == null)
 		{
 		{
 			return;
 			return;
 		}
 		}
 		
 		
-		switch (skillType)
+		switch (_skillType)
 		{
 		{
-			case Class:
+			case TRANSFORM:
+			case FISHING:
+			case SUBCLASS:
+			case COLLECT:
+			case TRANSFER:
+			{
+				sendPacket(new AcquireSkillInfo(_skillType, s));
+				break;
+			}
+			case CLASS:
 			{
 			{
 				if (trainer.getTemplate().canTeach(activeChar.getLearningClass()))
 				if (trainer.getTemplate().canTeach(activeChar.getLearningClass()))
 				{
 				{
 					final int customSp = s.getCalculatedLevelUpSp(activeChar.getClassId(), activeChar.getLearningClass());
 					final int customSp = s.getCalculatedLevelUpSp(activeChar.getClassId(), activeChar.getLearningClass());
-					sendPacket(new AcquireSkillInfo(skillType, s, customSp));
+					sendPacket(new AcquireSkillInfo(_skillType, s, customSp));
 				}
 				}
 				break;
 				break;
 			}
 			}
-			case Transform:
-			{
-				sendPacket(new AcquireSkillInfo(skillType, s));
-				break;
-			}
-			case Fishing:
-			{
-				sendPacket(new AcquireSkillInfo(skillType, s));
-				break;
-			}
-			case Pledge:
+			case PLEDGE:
 			{
 			{
 				if (!activeChar.isClanLeader())
 				if (!activeChar.isClanLeader())
 				{
 				{
 					return;
 					return;
 				}
 				}
-				sendPacket(new AcquireSkillInfo(skillType, s));
+				sendPacket(new AcquireSkillInfo(_skillType, s));
 				break;
 				break;
 			}
 			}
-			case SubPledge:
+			case SUBPLEDGE:
 			{
 			{
-				if (!activeChar.isClanLeader())
-				{
-					return;
-				}
-				
-				if (!(trainer instanceof L2SquadTrainer))
+				if (!activeChar.isClanLeader() || !(trainer instanceof L2SquadTrainer))
 				{
 				{
 					return;
 					return;
 				}
 				}
-				sendPacket(new AcquireSkillInfo(skillType, s));
-				break;
-			}
-			case SubClass:
-			{
-				sendPacket(new AcquireSkillInfo(skillType, s));
-				break;
-			}
-			case Collect:
-			{
-				sendPacket(new AcquireSkillInfo(skillType, s));
-				break;
-			}
-			case Transfer:
-			{
-				sendPacket(new AcquireSkillInfo(skillType, s));
+				sendPacket(new AcquireSkillInfo(_skillType, s));
 				break;
 				break;
 			}
 			}
 		}
 		}

+ 2 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/AcquireSkillInfo.java

@@ -28,6 +28,7 @@ import com.l2jserver.gameserver.model.holders.ItemHolder;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 
 
 /**
 /**
+ * Acquire Skill Info server packet implementation.
  * @author Zoey76
  * @author Zoey76
  */
  */
 public class AcquireSkillInfo extends L2GameServerPacket
 public class AcquireSkillInfo extends L2GameServerPacket
@@ -75,7 +76,7 @@ public class AcquireSkillInfo extends L2GameServerPacket
 		_spCost = skillLearn.getLevelUpSp();
 		_spCost = skillLearn.getLevelUpSp();
 		_type = skillType;
 		_type = skillType;
 		_reqs = new ArrayList<>();
 		_reqs = new ArrayList<>();
-		if ((skillType != AcquireSkillType.Pledge) || Config.LIFE_CRYSTAL_NEEDED)
+		if ((skillType != AcquireSkillType.PLEDGE) || Config.LIFE_CRYSTAL_NEEDED)
 		{
 		{
 			for (ItemHolder item : skillLearn.getRequiredItems())
 			for (ItemHolder item : skillLearn.getRequiredItems())
 			{
 			{

+ 9 - 5
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/AcquireSkillList.java

@@ -18,13 +18,17 @@
  */
  */
 package com.l2jserver.gameserver.network.serverpackets;
 package com.l2jserver.gameserver.network.serverpackets;
 
 
-import javolution.util.FastList;
+import java.util.ArrayList;
+import java.util.List;
 
 
 import com.l2jserver.gameserver.model.base.AcquireSkillType;
 import com.l2jserver.gameserver.model.base.AcquireSkillType;
 
 
+/**
+ * Acquire Skill List server packet implementation.
+ */
 public final class AcquireSkillList extends L2GameServerPacket
 public final class AcquireSkillList extends L2GameServerPacket
 {
 {
-	private final FastList<Skill> _skills;
+	private final List<Skill> _skills;
 	private final AcquireSkillType _skillType;
 	private final AcquireSkillType _skillType;
 	
 	
 	/**
 	/**
@@ -51,7 +55,7 @@ public final class AcquireSkillList extends L2GameServerPacket
 	public AcquireSkillList(AcquireSkillType type)
 	public AcquireSkillList(AcquireSkillType type)
 	{
 	{
 		_skillType = type;
 		_skillType = type;
-		_skills = new FastList<>();
+		_skills = new ArrayList<>();
 	}
 	}
 	
 	
 	public void addSkill(int id, int nextLevel, int maxLevel, int spCost, int requirements)
 	public void addSkill(int id, int nextLevel, int maxLevel, int spCost, int requirements)
@@ -62,7 +66,7 @@ public final class AcquireSkillList extends L2GameServerPacket
 	@Override
 	@Override
 	protected void writeImpl()
 	protected void writeImpl()
 	{
 	{
-		if (_skills == null)
+		if (_skills.isEmpty())
 		{
 		{
 			return;
 			return;
 		}
 		}
@@ -78,7 +82,7 @@ public final class AcquireSkillList extends L2GameServerPacket
 			writeD(temp.maxLevel);
 			writeD(temp.maxLevel);
 			writeD(temp.spCost);
 			writeD(temp.spCost);
 			writeD(temp.requirements);
 			writeD(temp.requirements);
-			if (_skillType == AcquireSkillType.SubPledge)
+			if (_skillType == AcquireSkillType.SUBPLEDGE)
 			{
 			{
 				writeD(0); // TODO: ?
 				writeD(0); // TODO: ?
 			}
 			}