Sfoglia il codice sorgente

BETA: Implementing more skill trees:
* Removed hardcoded GMSkillTable.
* Removed hardcoded HeroSkillTable.
* Removed hardcoded NobleSkillTable.
* Implemented support for XML new skill trees.

This represents a cleanup and unification of core functions.

Zoey76 13 anni fa
parent
commit
a9599b50e2

+ 1 - 7
L2J_Server_BETA/java/com/l2jserver/gameserver/GameServer.java

@@ -49,17 +49,14 @@ import com.l2jserver.gameserver.datatables.EnchantItemTable;
 import com.l2jserver.gameserver.datatables.EventDroplist;
 import com.l2jserver.gameserver.datatables.ExperienceTable;
 import com.l2jserver.gameserver.datatables.FishTable;
-import com.l2jserver.gameserver.datatables.GMSkillTable;
 import com.l2jserver.gameserver.datatables.HelperBuffTable;
 import com.l2jserver.gameserver.datatables.HennaTable;
 import com.l2jserver.gameserver.datatables.HennaTreeTable;
 import com.l2jserver.gameserver.datatables.HerbDropTable;
-import com.l2jserver.gameserver.datatables.HeroSkillTable;
 import com.l2jserver.gameserver.datatables.ItemTable;
 import com.l2jserver.gameserver.datatables.LevelUpData;
 import com.l2jserver.gameserver.datatables.MerchantPriceConfigTable;
 import com.l2jserver.gameserver.datatables.MultiSell;
-import com.l2jserver.gameserver.datatables.NobleSkillTable;
 import com.l2jserver.gameserver.datatables.NpcBufferTable;
 import com.l2jserver.gameserver.datatables.NpcTable;
 import com.l2jserver.gameserver.datatables.NpcWalkerRoutesTable;
@@ -216,11 +213,8 @@ public class GameServer
 		printSection("Skills");
 		EffectHandler.getInstance().executeScript();
 		EnchantGroupsTable.getInstance();
-		SkillTable.getInstance();
 		SkillTreesData.getInstance();
-		NobleSkillTable.getInstance();
-		GMSkillTable.getInstance();
-		HeroSkillTable.getInstance();
+		SkillTable.getInstance();
 		SummonSkillsTable.getInstance();
 		
 		printSection("Items");

+ 0 - 84
L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/GMSkillTable.java

@@ -1,84 +0,0 @@
-/*
- * This program 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.
- * 
- * This program 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.datatables;
-
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.skills.L2Skill;
-import com.l2jserver.gameserver.util.Util;
-
-/**
- * @author Gnacik, Zoey76
- */
-public class GMSkillTable
-{
-	private static final L2Skill[] _gmSkills = new L2Skill[46];
-	private static final L2Skill[] _gmAuraSkills = new L2Skill[46];
-	private static final int[] _gmSkillsId = { 7029, 7041, 7042, 7043, 7044, 7045, 7046, 7047, 7048, 7049, 7050, 7051, 7052, 7053, 7054, 7055, 7056, 7057, 7058, 7059, 7060, 7061, 7062, 7063, 7064, 7088, 7089, 7090, 7091, 7092, 7093, 7094, 7095, 7096, 23238, 23239, 23240, 23241, 23242, 23243, 23244, 23245, 23246, 23247, 23248, 23249 };
-	private static final int[] _gmAuraSkillsId = { 7029, 23249, 23253, 23254, 23255, 23256, 23257, 23258, 23259, 23260, 23261, 23262, 23263, 23264, 23265, 23266, 23267, 23268, 23269, 23270, 23271, 23272, 23273, 23274, 23275, 23276, 23277, 23278, 23279, 23280, 23281, 23282, 23283, 23284, 23285, 23286, 23287, 23288, 23289, 23290, 23291, 23292, 23293, 23294, 23295, 23296 };
-	
-	private GMSkillTable()
-	{
-		for (int i = 0; i < _gmSkillsId.length; i++)
-		{
-			_gmSkills[i] = SkillTable.getInstance().getInfo(_gmSkillsId[i], 1);
-			_gmAuraSkills[i] = SkillTable.getInstance().getInfo(_gmAuraSkillsId[i], 1);
-		}
-	}
-	
-	public static GMSkillTable getInstance()
-	{
-		return SingletonHolder._instance;
-	}
-	
-	public static L2Skill[] getGMSkills()
-	{
-		return _gmSkills;
-	}
-	
-	public static L2Skill[] getGMAuraSkills()
-	{
-		return _gmAuraSkills;
-	}
-	
-	public static boolean isGMSkill(int skillid)
-	{
-		return Util.contains(_gmSkillsId, skillid) || Util.contains(_gmAuraSkillsId, skillid);
-	}
-	
-	public void addSkills(L2PcInstance gmchar, boolean auraSkills)
-	{
-		final L2Skill[] skills = auraSkills ? getGMAuraSkills() : getGMSkills();
-		for (L2Skill s : skills)
-		{
-			gmchar.addSkill(s, false); // Don't Save GM skills to database
-		}
-	}
-	
-	public void switchSkills(L2PcInstance gmchar, boolean toAuraSkills)
-	{
-		final L2Skill[] skills = toAuraSkills ? getGMSkills() : getGMAuraSkills();
-		for (L2Skill s : skills)
-		{
-			gmchar.removeSkill(s, false); // Don't Save GM skills to database
-		}
-		addSkills(gmchar, toAuraSkills);
-	}
-	
-	@SuppressWarnings("synthetic-access")
-	private static class SingletonHolder
-	{
-		protected static final GMSkillTable _instance = new GMSkillTable();
-	}
-}

+ 0 - 64
L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/HeroSkillTable.java

@@ -1,64 +0,0 @@
-/*
- * This program 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.
- * 
- * This program 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.datatables;
-
-import com.l2jserver.gameserver.model.skills.L2Skill;
-
-/**
- *
- * @author BiTi
- */
-public class HeroSkillTable
-{
-	private static final L2Skill[] _heroSkills = new L2Skill[5];
-	private static final int[] _heroSkillsId = {395, 396, 1374, 1375, 1376};
-	
-	private HeroSkillTable()
-	{
-		for (int i=0; i<_heroSkillsId.length; i++)
-			_heroSkills[i] = SkillTable.getInstance().getInfo(_heroSkillsId[i], 1);
-	}
-	
-	public static HeroSkillTable getInstance()
-	{
-		return SingletonHolder._instance;
-	}
-	
-	public static L2Skill[] getHeroSkills()
-	{
-		return _heroSkills;
-	}
-	
-	public static boolean isHeroSkill(int skillid)
-	{
-		/*
-		 * Do not perform checks directly on L2Skill array,
-		 * it will cause errors due to SkillTable not initialized
-		 */
-		for (int id : _heroSkillsId)
-		{
-			if (id == skillid)
-				return true;
-		}
-		
-		return false;
-	}
-	
-	@SuppressWarnings("synthetic-access")
-	private static class SingletonHolder
-	{
-		protected static final HeroSkillTable _instance = new HeroSkillTable();
-	}
-}

+ 0 - 54
L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/NobleSkillTable.java

@@ -1,54 +0,0 @@
-/*
- * This program 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.
- * 
- * This program 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.datatables;
-
-import com.l2jserver.gameserver.model.skills.L2Skill;
-
-/**
- *
- * @author -Nemesiss-
- */
-public class NobleSkillTable
-{
-	private static final L2Skill[] _nobleSkills = new L2Skill[8];
-	
-	private NobleSkillTable()
-	{
-		_nobleSkills[0] = SkillTable.getInstance().getInfo(1323, 1);
-		_nobleSkills[1] = SkillTable.getInstance().getInfo(325, 1);
-		_nobleSkills[2] = SkillTable.getInstance().getInfo(326, 1);
-		_nobleSkills[3] = SkillTable.getInstance().getInfo(327, 1);
-		_nobleSkills[4] = SkillTable.getInstance().getInfo(1324, 1);
-		_nobleSkills[5] = SkillTable.getInstance().getInfo(1325, 1);
-		_nobleSkills[6] = SkillTable.getInstance().getInfo(1326, 1);
-		_nobleSkills[7] = SkillTable.getInstance().getInfo(1327, 1);
-	}
-	
-	public static NobleSkillTable getInstance()
-	{
-		return SingletonHolder._instance;
-	}
-	
-	public L2Skill[] getNobleSkills()
-	{
-		return _nobleSkills;
-	}
-	
-	@SuppressWarnings("synthetic-access")
-	private static class SingletonHolder
-	{
-		protected static final NobleSkillTable _instance = new NobleSkillTable();
-	}
-}

+ 150 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/SkillTreesData.java

@@ -18,6 +18,8 @@ import gnu.trove.map.hash.TIntObjectHashMap;
 
 import java.io.File;
 import java.util.Arrays;
+import java.util.Collection;
+import java.util.Map.Entry;
 import java.util.Set;
 import java.util.logging.Logger;
 
@@ -49,10 +51,10 @@ public final class SkillTreesData
 {
 	private static final Logger _log = Logger.getLogger(SkillTreesData.class.getName());
 	
-	// ClassId, FastMap of Skill Hash Code, L2LearkSkill
+	// ClassId, FastMap of Skill Hash Code, L2SkillLearn
 	private static final FastMap<ClassId, FastMap<Integer, L2SkillLearn>> _classSkillTrees = new FastMap<ClassId, FastMap<Integer, L2SkillLearn>>();
 	private static final FastMap<ClassId, FastMap<Integer, L2SkillLearn>> _transferSkillTrees = new FastMap<ClassId, FastMap<Integer, L2SkillLearn>>();
-	// Skill Hash Code, L2LearkSkill
+	// Skill Hash Code, L2SkillLearn
 	private static final FastMap<Integer, L2SkillLearn> _collectSkillTree = new FastMap<Integer, L2SkillLearn>();
 	private static final FastMap<Integer, L2SkillLearn> _fishingSkillTree = new FastMap<Integer, L2SkillLearn>();
 	private static final FastMap<Integer, L2SkillLearn> _pledgeSkillTree = new FastMap<Integer, L2SkillLearn>();
@@ -60,6 +62,11 @@ public final class SkillTreesData
 	private static final FastMap<Integer, L2SkillLearn> _subPledgeSkillTree = new FastMap<Integer, L2SkillLearn>();
 	private static final FastMap<Integer, L2SkillLearn> _transformSkillTree = new FastMap<Integer, L2SkillLearn>();
 	private static final FastMap<Integer, L2SkillLearn> _commonSkillTree = new FastMap<Integer, L2SkillLearn>();
+	// Other skill trees
+	private static final FastMap<Integer, L2SkillLearn> _nobleSkillTree = new FastMap<>();
+	private static final FastMap<Integer, L2SkillLearn> _heroSkillTree = new FastMap<>();
+	private static final FastMap<Integer, L2SkillLearn> _gameMasterSkillTree = new FastMap<>();
+	private static final FastMap<Integer, L2SkillLearn> _gameMasterAuraSkillTree = new FastMap<>();
 	
 	// Checker, sorted arrays of hash codes
 	private TIntObjectHashMap<int[]> _skillsByClassIdHashCodes; // Occupation skills
@@ -89,6 +96,10 @@ public final class SkillTreesData
 		_subPledgeSkillTree.clear();
 		_transferSkillTrees.clear();
 		_transformSkillTree.clear();
+		_nobleSkillTree.clear();
+		_heroSkillTree.clear();
+		_gameMasterSkillTree.clear();
+		_gameMasterAuraSkillTree.clear();
 		
 		// Load files.
 		_loading = loadFiles();
@@ -134,6 +145,10 @@ public final class SkillTreesData
 		_log.info(getClass().getSimpleName() + ": Loaded " + _pledgeSkillTree.size() + " Pledge Skills, " + (_pledgeSkillTree.size() - residentialSkillCount) + " for Pledge and " + residentialSkillCount + " Residential.");
 		_log.info(getClass().getSimpleName() + ": Loaded " + _subPledgeSkillTree.size() + " Sub-Pledge Skills.");
 		_log.info(getClass().getSimpleName() + ": Loaded " + _transformSkillTree.size() + " Transform Skills.");
+		_log.info(getClass().getSimpleName() + ": Loaded " + _nobleSkillTree.size() + " Noble Skills.");
+		_log.info(getClass().getSimpleName() + ": Loaded " + _heroSkillTree.size() + " Hero Skills.");
+		_log.info(getClass().getSimpleName() + ": Loaded " + _gameMasterSkillTree.size() + " Game Master Skills.");
+		_log.info(getClass().getSimpleName() + ": Loaded " + _gameMasterAuraSkillTree.size() + " Game Master Aura Skills.");
 		final int commonSkills = _commonSkillTree.size();
 		if (commonSkills > 0)
 		{
@@ -193,7 +208,6 @@ public final class SkillTreesData
 		int cId = -1;
 		int parentClassId = -1;
 		ClassId classId = null;
-		
 		for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling())
 		{
 			if ("list".equalsIgnoreCase(n.getNodeName()))
@@ -402,6 +416,22 @@ public final class SkillTreesData
 									{
 										_transformSkillTree.put(skillHashCode, skillLearn);
 									}
+									else if (type.equals("nobleSkillTree"))
+									{
+										_nobleSkillTree.put(skillHashCode, skillLearn);
+									}
+									else if (type.equals("heroSkillTree"))
+									{
+										_heroSkillTree.put(skillHashCode, skillLearn);
+									}
+									else if (type.equals("gameMasterSkillTree"))
+									{
+										_gameMasterSkillTree.put(skillHashCode, skillLearn);
+									}
+									else if (type.equals("gameMasterAuraSkillTree"))
+									{
+										_gameMasterAuraSkillTree.put(skillHashCode, skillLearn);
+									}
 								}
 							}
 						}
@@ -530,6 +560,62 @@ public final class SkillTreesData
 		return _transformSkillTree;
 	}
 	
+	/**
+	 * @return the complete Noble Skill Tree.
+	 */
+	public FastMap<Integer, L2Skill> getNobleSkillTree()
+	{
+		final FastMap<Integer, L2Skill> tree = new FastMap<>();
+		final SkillTable st = SkillTable.getInstance();
+		for (Entry<Integer, L2SkillLearn> e : _nobleSkillTree.entrySet())
+		{
+			tree.put(e.getKey(), st.getInfo(e.getValue().getSkillId(), e.getValue().getSkillLevel()));
+		}
+		return tree;
+	}
+	
+	/**
+	 * @return the complete Hero Skill Tree.
+	 */
+	public FastMap<Integer, L2Skill> getHeroSkillTree()
+	{
+		final FastMap<Integer, L2Skill> tree = new FastMap<>();
+		final SkillTable st = SkillTable.getInstance();
+		for (Entry<Integer, L2SkillLearn> e : _heroSkillTree.entrySet())
+		{
+			tree.put(e.getKey(), st.getInfo(e.getValue().getSkillId(), e.getValue().getSkillLevel()));
+		}
+		return tree;
+	}
+	
+	/**
+	 * @return the complete Game Master Skill Tree.
+	 */
+	public FastMap<Integer, L2Skill> getGMSkillTree()
+	{
+		final FastMap<Integer, L2Skill> tree = new FastMap<>();
+		final SkillTable st = SkillTable.getInstance();
+		for (Entry<Integer, L2SkillLearn> e : _gameMasterSkillTree.entrySet())
+		{
+			tree.put(e.getKey(), st.getInfo(e.getValue().getSkillId(), e.getValue().getSkillLevel()));
+		}
+		return tree;
+	}
+	
+	/**
+	 * @return the complete Game Master Aura Skill Tree.
+	 */
+	public FastMap<Integer, L2Skill> getGMAuraSkillTree()
+	{
+		final FastMap<Integer, L2Skill> tree = new FastMap<>();
+		final SkillTable st = SkillTable.getInstance();
+		for (Entry<Integer, L2SkillLearn> e : _gameMasterAuraSkillTree.entrySet())
+		{
+			tree.put(e.getKey(), st.getInfo(e.getValue().getSkillId(), e.getValue().getSkillLevel()));
+		}
+		return tree;
+	}
+	
 	/**
 	 * @param player the learning skill player.
 	 * @param classId the learning skill class ID.
@@ -1090,6 +1176,67 @@ public final class SkillTreesData
 		return minLevel;
 	}
 	
+	/**
+	 * @param skillId the Id of the skill to check.
+	 * @param skillLevel the level of the skill to check, if it's -1 only Id will be checked.
+	 * @return {@code true} if the skill is present in the Hero Skill Tree, {@code false} otherwise.
+	 */
+	public boolean isHeroSkill(int skillId, int skillLevel)
+	{
+		if (_heroSkillTree.containsKey(SkillTable.getSkillHashCode(skillId, skillLevel)))
+		{
+			return true;
+		}
+		
+		for (L2SkillLearn skill : _heroSkillTree.values())
+		{
+			if ((skill.getSkillId() == skillId) && (skillLevel == -1))
+			{
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	/**
+	 * @param skillId skillId the Id of the skill to check.
+	 * @param skillLevel skillLevel the level of the skill to check, if it's -1 only Id will be checked.
+	 * @return {@code true} if the skill is present in the Game Master Skill Trees, {@code false} otherwise.
+	 */
+	public boolean isGMSkill(int skillId, int skillLevel)
+	{
+		final FastMap<Integer, L2SkillLearn> gmSkills = new FastMap<>();
+		gmSkills.putAll(_gameMasterSkillTree);
+		gmSkills.putAll(_gameMasterAuraSkillTree);
+		if (gmSkills.containsKey(SkillTable.getSkillHashCode(skillId, skillLevel)))
+		{
+			return true;
+		}
+		
+		for (L2SkillLearn skill : gmSkills.values())
+		{
+			if ((skill.getSkillId() == skillId) && (skillLevel == -1))
+			{
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	/**
+	 * @param gmchar the player to add the Game Master skills.
+	 * @param auraSkills if {@code true} it will add "GM Aura" skills, else will add the "GM regular" skills.
+	 */
+	public void addSkills(L2PcInstance gmchar, boolean auraSkills)
+	{
+		final Collection<L2SkillLearn> skills = auraSkills ? _gameMasterAuraSkillTree.values() : _gameMasterSkillTree.values();
+		final SkillTable st = SkillTable.getInstance();
+		for (L2SkillLearn sl : skills)
+		{
+			gmchar.addSkill(st.getInfo(sl.getSkillId(), sl.getSkillLevel()), false); // Don't Save GM skills to database
+		}
+	}
+	
 	/**
 	 * Create and store hash values for skills for easy and fast checks.
 	 */

+ 22 - 10
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -70,9 +70,7 @@ import com.l2jserver.gameserver.datatables.EnchantGroupsTable;
 import com.l2jserver.gameserver.datatables.ExperienceTable;
 import com.l2jserver.gameserver.datatables.FishTable;
 import com.l2jserver.gameserver.datatables.HennaTable;
-import com.l2jserver.gameserver.datatables.HeroSkillTable;
 import com.l2jserver.gameserver.datatables.ItemTable;
-import com.l2jserver.gameserver.datatables.NobleSkillTable;
 import com.l2jserver.gameserver.datatables.NpcTable;
 import com.l2jserver.gameserver.datatables.PetDataTable;
 import com.l2jserver.gameserver.datatables.SkillTable;
@@ -10549,13 +10547,17 @@ public final class L2PcInstance extends L2Playable
 	{
 		if (hero && _baseClass == _activeClass)
 		{
-			for (L2Skill s : HeroSkillTable.getHeroSkills())
-				addSkill(s, false); //Dont Save Hero skills to database
+			for (L2Skill skill : SkillTreesData.getInstance().getHeroSkillTree().values())
+			{
+				addSkill(skill, false); //Dont Save Hero skills to database
+			}
 		}
 		else
 		{
-			for (L2Skill s : HeroSkillTable.getHeroSkills())
-				super.removeSkill(s); //Just Remove skills from nonHero characters
+			for (L2Skill skill : SkillTreesData.getInstance().getHeroSkillTree().values())
+			{
+				super.removeSkill(skill); //Just Remove skills from nonHero characters
+			}
 		}
 		_hero = hero;
 		
@@ -10675,12 +10677,22 @@ public final class L2PcInstance extends L2Playable
 	
 	public void setNoble(boolean val)
 	{
+		final Collection<L2Skill> nobleSkillTree = SkillTreesData.getInstance().getNobleSkillTree().values();
 		if (val)
-			for (L2Skill s : NobleSkillTable.getInstance().getNobleSkills())
-				addSkill(s, false); //Dont Save Noble skills to Sql
+		{
+			for (L2Skill skill : nobleSkillTree)
+			{
+				addSkill(skill, false);
+			}
+		}
 		else
-			for (L2Skill s : NobleSkillTable.getInstance().getNobleSkills())
-				super.removeSkill(s); //Just Remove skills without deleting from Sql
+		{
+			for (L2Skill skill : nobleSkillTree)
+			{
+				super.removeSkill(skill);
+			}
+		}
+		
 		_noble = val;
 		
 		sendSkillList();

+ 7 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/model/olympiad/AbstractOlympiadGame.java

@@ -20,7 +20,7 @@ import java.util.logging.Logger;
 
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.datatables.HeroSkillTable;
+import com.l2jserver.gameserver.datatables.SkillTreesData;
 import com.l2jserver.gameserver.instancemanager.AntiFeedManager;
 import com.l2jserver.gameserver.instancemanager.CastleManager;
 import com.l2jserver.gameserver.instancemanager.FortManager;
@@ -228,8 +228,10 @@ public abstract class AbstractOlympiadGame
 			// Remove Hero Skills
 			if (player.isHero())
 			{
-				for (L2Skill skill : HeroSkillTable.getHeroSkills())
+				for (L2Skill skill : SkillTreesData.getInstance().getHeroSkillTree().values())
+				{
 					player.removeSkill(skill, false);
+				}
 			}
 			
 			// Heal Player fully
@@ -360,8 +362,10 @@ public abstract class AbstractOlympiadGame
 			// Add Hero Skills
 			if (player.isHero())
 			{
-				for (L2Skill skill : HeroSkillTable.getHeroSkills())
+				for (L2Skill skill : SkillTreesData.getInstance().getHeroSkillTree().values())
+				{
 					player.addSkill(skill, false);
+				}
 			}
 			player.sendSkillList();
 

+ 3 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/model/skills/L2Skill.java

@@ -26,10 +26,9 @@ import javolution.util.FastMap;
 
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.GeoData;
-import com.l2jserver.gameserver.datatables.GMSkillTable;
-import com.l2jserver.gameserver.datatables.HeroSkillTable;
 import com.l2jserver.gameserver.datatables.ItemTable;
 import com.l2jserver.gameserver.datatables.SkillTable;
+import com.l2jserver.gameserver.datatables.SkillTreesData;
 import com.l2jserver.gameserver.handler.ITargetTypeHandler;
 import com.l2jserver.gameserver.handler.TargetHandler;
 import com.l2jserver.gameserver.model.ChanceCondition;
@@ -490,8 +489,8 @@ public abstract class L2Skill implements IChanceSkillTrigger
 		_transformId = set.getInteger("transformId", 0);
 		_transformDuration = set.getInteger("transformDuration", 0);
 		
-		_isHeroSkill = HeroSkillTable.isHeroSkill(_id);
-		_isGMSkill = GMSkillTable.isGMSkill(_id);
+		_isHeroSkill = SkillTreesData.getInstance().isHeroSkill(_id, _level);
+		_isGMSkill = SkillTreesData.getInstance().isGMSkill(_id, _level);
 		
 		_baseCritRate = set.getInteger("baseCritRate", (_skillType == L2SkillType.PDAM  || _skillType == L2SkillType.BLOW) ? 0 : -1);
 		_lethalEffect1 = set.getInteger("lethal1",0);

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

@@ -28,8 +28,8 @@ import com.l2jserver.gameserver.TaskPriority;
 import com.l2jserver.gameserver.cache.HtmCache;
 import com.l2jserver.gameserver.communitybbs.Manager.RegionBBSManager;
 import com.l2jserver.gameserver.datatables.AdminCommandAccessRights;
-import com.l2jserver.gameserver.datatables.GMSkillTable;
 import com.l2jserver.gameserver.datatables.SkillTable;
+import com.l2jserver.gameserver.datatables.SkillTreesData;
 import com.l2jserver.gameserver.instancemanager.CHSiegeManager;
 import com.l2jserver.gameserver.instancemanager.CastleManager;
 import com.l2jserver.gameserver.instancemanager.ClanHallManager;
@@ -189,10 +189,10 @@ public class EnterWorld extends L2GameClientPacket
 				GmListTable.getInstance().addGm(activeChar, true);
 			
 			if (Config.GM_GIVE_SPECIAL_SKILLS)
-				GMSkillTable.getInstance().addSkills(activeChar, false);
+				SkillTreesData.getInstance().addSkills(activeChar, false);
 			
 			if (Config.GM_GIVE_SPECIAL_AURA_SKILLS)
-				GMSkillTable.getInstance().addSkills(activeChar, true);
+				SkillTreesData.getInstance().addSkills(activeChar, true);
 		}
 		
 		// Set dead status if applies