浏览代码

More usage of L2TIntObjectHashMap - character skills.

Nik 13 年之前
父节点
当前提交
aa8ca88a27

+ 2 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/NpcTable.java

@@ -26,7 +26,6 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import javolution.util.FastList;
-import javolution.util.FastMap;
 
 import com.l2jserver.Config;
 import com.l2jserver.L2DatabaseFactory;
@@ -690,7 +689,7 @@ public class NpcTable
 		{
 			// save a copy of the old data
 			L2NpcTemplate old = getTemplate(id);
-			Map<Integer, L2Skill> skills = new FastMap<Integer, L2Skill>();
+			TIntObjectHashMap<L2Skill> skills = new TIntObjectHashMap<L2Skill>();
 			
 			if (old.getSkills() != null)
 				skills.putAll(old.getSkills());
@@ -740,7 +739,7 @@ public class NpcTable
 			// restore additional data from saved copy
 			L2NpcTemplate created = getTemplate(id);
 			
-			for (L2Skill skill : skills.values())
+			for (L2Skill skill : skills.getValues(new L2Skill[skills.size()]))
 				created.addSkill(skill);
 			
 			if (classIds != null)

+ 3 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Attackable.java

@@ -15,7 +15,6 @@
 package com.l2jserver.gameserver.model.actor;
 
 import java.util.List;
-import java.util.Map;
 import java.util.logging.Level;
 
 import javolution.util.FastList;
@@ -2232,11 +2231,11 @@ public class L2Attackable extends L2Npc
 		_seedType = id;
 		int count = 1;
 		
-		Map<Integer, L2Skill> skills = getTemplate().getSkills();
+		int[] skillIds = getTemplate().getSkills().keys();
 		
-		if (skills != null)
+		if (skillIds != null)
 		{
-			for (int skillId : skills.keySet())
+			for (int skillId : skillIds)
 			{
 				switch (skillId)
 				{

+ 12 - 12
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Character.java

@@ -115,6 +115,7 @@ import com.l2jserver.gameserver.templates.item.L2Weapon;
 import com.l2jserver.gameserver.templates.item.L2WeaponType;
 import com.l2jserver.gameserver.templates.skills.L2EffectType;
 import com.l2jserver.gameserver.templates.skills.L2SkillType;
+import com.l2jserver.gameserver.util.L2TIntObjectHashMap;
 import com.l2jserver.gameserver.util.Point3D;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.util.Rnd;
@@ -175,7 +176,7 @@ public abstract class L2Character extends L2Object
 	private Calculator[] _calculators;
 	
 	/** FastMap(Integer, L2Skill) containing all skills of the L2Character */
-	protected final Map<Integer, L2Skill> _skills;
+	protected final L2TIntObjectHashMap<L2Skill> _skills;
 	/** FastMap containing the active chance skills on this character */
 	private ChanceSkillList _chanceSkills;
 	
@@ -384,11 +385,12 @@ public abstract class L2Character extends L2Object
 			// Copy the skills of the L2NPCInstance from its template to the L2Character Instance
 			// The skills list can be affected by spell effects so it's necessary to make a copy
 			// to avoid that a spell affecting a L2NPCInstance, affects others L2NPCInstance of the same type too.
-			_skills = ((L2NpcTemplate)template).getSkills();
+			_skills = new L2TIntObjectHashMap<L2Skill>();
+			_skills.putAll(((L2NpcTemplate)template).getSkills());
 			if (_skills != null)
 			{
-				for(Map.Entry<Integer, L2Skill> skill : _skills.entrySet())
-					addStatFuncs(skill.getValue().getStatFuncs(null, this));
+				for(L2Skill skill : getAllSkills())
+					addStatFuncs(skill.getStatFuncs(null, this));
 			}
 		}
 		else
@@ -401,20 +403,18 @@ public abstract class L2Character extends L2Object
 				// Copy the skills of the L2Summon from its template to the L2Character Instance
 				// The skills list can be affected by spell effects so it's necessary to make a copy
 				// to avoid that a spell affecting a L2Summon, affects others L2Summon of the same type too.
-				if (((L2NpcTemplate) template).getSkills() == null)
-					_skills = new FastMap<Integer,L2Skill>().shared();
-				else
-					_skills = ((L2NpcTemplate)template).getSkills();
+				_skills = new L2TIntObjectHashMap<L2Skill>();
+				_skills.putAll(((L2NpcTemplate)template).getSkills());
 				if (_skills != null)
 				{
-					for(Map.Entry<Integer, L2Skill> skill : _skills.entrySet())
-						addStatFuncs(skill.getValue().getStatFuncs(null, this));
+					for(L2Skill skill : getAllSkills())
+						addStatFuncs(skill.getStatFuncs(null, this));
 				}
 			}
 			else
 			{
 				// Initialize the FastMap _skills to null
-				_skills = new FastMap<Integer,L2Skill>().shared();
+				_skills = new L2TIntObjectHashMap<L2Skill>();
 			}
 			
 			Formulas.addFuncsToNewCharacter(this);
@@ -5861,7 +5861,7 @@ public abstract class L2Character extends L2Object
 		if (_skills == null)
 			return new L2Skill[0];
 		
-		return _skills.values().toArray(new L2Skill[_skills.values().size()]);
+		return _skills.getValues(new L2Skill[_skills.size()]);
 	}
 	
 	public ChanceSkillList getChanceSkills()

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

@@ -14680,7 +14680,7 @@ public final class L2PcInstance extends L2Playable
 	 */
 	public void checkPlayerSkills()
 	{
-		for (int id : _skills.keySet())
+		for (int id : _skills.keys())
 		{
 			int level = getSkillLevel(id);
 			if (level >= 100) // enchanted skill

+ 4 - 11
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2TamedBeastInstance.java

@@ -20,7 +20,6 @@ import java.util.List;
 import java.util.concurrent.Future;
 
 import javolution.util.FastList;
-import javolution.util.FastMap;
 
 import com.l2jserver.gameserver.ThreadPoolManager;
 import com.l2jserver.gameserver.ai.CtrlIntention;
@@ -249,7 +248,7 @@ public final class L2TamedBeastInstance extends L2FeedableBeastInstance
 			{
 				// instead of calculating this value each time, let's get this now and pass it on
 				int totalBuffsAvailable = 0;
-				for (L2Skill skill: getTemplate().getSkills().values())
+				for (L2Skill skill: getTemplate().getSkillsArray())
 				{
 					// if the skill is a buff, check if the owner has it already [  owner.getEffect(L2Skill skill) ]
 					if (skill.getSkillType() == L2SkillType.BUFF)
@@ -325,9 +324,7 @@ public final class L2TamedBeastInstance extends L2FeedableBeastInstance
 		// use of more than one debuff at this moment is acceptable
 		if (HPRatio >= 0.8)
 		{
-			FastMap<Integer, L2Skill> skills = (FastMap<Integer, L2Skill>) getTemplate().getSkills();
-			
-			for (L2Skill skill: skills.values())
+			for (L2Skill skill: getTemplate().getSkillsArray())
 			{
 				// if the skill is a debuff, check if the attacker has it already [  attacker.getEffect(L2Skill skill) ]
 				if ((skill.getSkillType() == L2SkillType.DEBUFF) && Rnd.get(3) < 1 && (attacker != null && attacker.getFirstEffect(skill) != null))
@@ -345,9 +342,7 @@ public final class L2TamedBeastInstance extends L2FeedableBeastInstance
 				chance = 2;
 			
 			// if the owner has a lot of HP, then debuff the enemy with a random debuff among the available skills
-			FastMap<Integer, L2Skill> skills = (FastMap<Integer, L2Skill>) getTemplate().getSkills();
-			
-			for (L2Skill skill: skills.values())
+			for (L2Skill skill: getTemplate().getSkillsArray())
 			{
 				// if the skill is a buff, check if the owner has it already [  owner.getEffect(L2Skill skill) ]
 				if ( (Rnd.get(5) < chance) && ((skill.getSkillType() == L2SkillType.HEAL) ||
@@ -499,9 +494,7 @@ public final class L2TamedBeastInstance extends L2FeedableBeastInstance
 			L2Skill buffToGive = null;
 			
 			// get this npc's skills:  getSkills()
-			FastMap<Integer, L2Skill> skills = (FastMap<Integer, L2Skill>) _tamedBeast.getTemplate().getSkills();
-			
-			for (L2Skill skill: skills.values())
+			for (L2Skill skill: _tamedBeast.getTemplate().getSkillsArray())
 			{
 				// if the skill is a buff, check if the owner has it already [  owner.getEffect(L2Skill skill) ]
 				if (skill.getSkillType() == L2SkillType.BUFF)

+ 10 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/templates/chars/L2NpcTemplate.java

@@ -14,6 +14,8 @@
  */
 package com.l2jserver.gameserver.templates.chars;
 
+import gnu.trove.TIntObjectHashMap;
+
 import java.util.List;
 import java.util.Map;
 import java.util.logging.Logger;
@@ -169,7 +171,7 @@ public final class L2NpcTemplate extends L2CharTemplate
 	private List<L2MinionData> _minions = null;
 	
 	private List<ClassId> _teachInfo;
-	private Map<Integer, L2Skill> _skills;
+	private TIntObjectHashMap<L2Skill> _skills;
 	//private Map<Stats, Double> _vulnerabilities;
 	// contains a list of quests for each event type (questStart, questAttack, questKill, etc)
 	private Map<Quest.QuestEventType, Quest[]> _questEvents;
@@ -309,7 +311,7 @@ public final class L2NpcTemplate extends L2CharTemplate
 	{
 		
 		if (_skills == null)
-			_skills = new FastMap<Integer, L2Skill>();
+			_skills = new TIntObjectHashMap<L2Skill>();
 		
 		if(!skill.isPassive())
 		{
@@ -447,11 +449,16 @@ public final class L2NpcTemplate extends L2CharTemplate
 		return _minions;
 	}
 	
-	public Map<Integer, L2Skill> getSkills()
+	public TIntObjectHashMap<L2Skill> getSkills()
 	{
 		return _skills;
 	}
 	
+	public L2Skill[] getSkillsArray()
+	{
+		return _skills.getValues(new L2Skill[_skills.size()]);
+	}
+	
 	public void addQuestEvent(Quest.QuestEventType EventType, Quest q)
 	{
 		if (_questEvents == null)