Browse Source

BETA: Rewriting NpcBufferTable bit more OOP:
* Using proper DTO NpcBufferData and one map, instead of 4 maps.
* Implemented using Java instead of Trove.
* Minor rewrite of L2NpcBufferInstance.

Zoey76 12 years ago
parent
commit
9a3803a3f2

+ 47 - 27
L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/NpcBufferTable.java

@@ -29,8 +29,8 @@ import java.util.logging.Logger;
 
 import com.l2jserver.Config;
 import com.l2jserver.L2DatabaseFactory;
-
-import gnu.trove.map.hash.TIntIntHashMap;
+import com.l2jserver.gameserver.model.holders.ItemHolder;
+import com.l2jserver.gameserver.model.holders.SkillHolder;
 
 public class NpcBufferTable
 {
@@ -38,39 +38,52 @@ public class NpcBufferTable
 	
 	private final Map<Integer, NpcBufferSkills> _buffers = new HashMap<>();
 	
+	public static class NpcBufferData
+	{
+		private final SkillHolder _skill;
+		private final ItemHolder _fee;
+		
+		protected NpcBufferData(int skillId, int skillLevel, int feeId, int feeAmount)
+		{
+			_skill = new SkillHolder(skillId, skillLevel);
+			_fee = new ItemHolder(feeId, feeAmount);
+		}
+		
+		public SkillHolder getSkill()
+		{
+			return _skill;
+		}
+		
+		public ItemHolder getFee()
+		{
+			return _fee;
+		}
+	}
+	
 	private static class NpcBufferSkills
 	{
-		private final TIntIntHashMap _skillId = new TIntIntHashMap();
-		private final TIntIntHashMap _skillLevels = new TIntIntHashMap();
-		private final TIntIntHashMap _skillFeeIds = new TIntIntHashMap();
-		private final TIntIntHashMap _skillFeeAmounts = new TIntIntHashMap();
+		private final int _npcId;
+		private final Map<Integer, NpcBufferData> _skills = new HashMap<>();
 		
-		public NpcBufferSkills(int npcId)
+		protected NpcBufferSkills(int npcId)
 		{
-			//
+			_npcId = npcId;
 		}
 		
 		public void addSkill(int skillId, int skillLevel, int skillFeeId, int skillFeeAmount, int buffGroup)
 		{
-			_skillId.put(buffGroup, skillId);
-			_skillLevels.put(buffGroup, skillLevel);
-			_skillFeeIds.put(buffGroup, skillFeeId);
-			_skillFeeAmounts.put(buffGroup, skillFeeAmount);
+			_skills.put(buffGroup, new NpcBufferData(skillId, skillLevel, skillFeeId, skillFeeAmount));
 		}
 		
-		public int[] getSkillGroupInfo(int buffGroup)
+		public NpcBufferData getSkillGroupInfo(int buffGroup)
 		{
-			if (_skillId.containsKey(buffGroup) && _skillLevels.containsKey(buffGroup) && _skillFeeIds.containsKey(buffGroup) && _skillFeeAmounts.containsKey(buffGroup))
-			{
-				return new int[]
-				{
-					_skillId.get(buffGroup),
-					_skillLevels.get(buffGroup),
-					_skillFeeIds.get(buffGroup),
-					_skillFeeAmounts.get(buffGroup)
-				};
-			}
-			return null;
+			return _skills.get(buffGroup);
+		}
+		
+		@SuppressWarnings("unused")
+		public int getNpcId()
+		{
+			return _npcId;
 		}
 	}
 	
@@ -170,10 +183,17 @@ public class NpcBufferTable
 		_log.info(getClass().getSimpleName() + ": Loaded " + _buffers.size() + " buffers and " + skillCount + " skills.");
 	}
 	
-	public int[] getSkillInfo(int npcId, int buffGroup)
+	public NpcBufferData getSkillInfo(int npcId, int buffGroup)
 	{
-		final NpcBufferSkills skills = _buffers.get(npcId);
-		return (skills == null) ? null : skills.getSkillGroupInfo(buffGroup);
+		if (_buffers.containsKey(npcId))
+		{
+			final NpcBufferSkills skills = _buffers.get(npcId);
+			if (skills != null)
+			{
+				return skills.getSkillGroupInfo(buffGroup);
+			}
+		}
+		return null;
 	}
 	
 	public static NpcBufferTable getInstance()

+ 21 - 32
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2NpcBufferInstance.java

@@ -18,10 +18,13 @@
  */
 package com.l2jserver.gameserver.model.actor.instance;
 
+import java.util.HashMap;
+import java.util.Map;
 import java.util.logging.Logger;
 
 import com.l2jserver.gameserver.cache.HtmCache;
 import com.l2jserver.gameserver.datatables.NpcBufferTable;
+import com.l2jserver.gameserver.datatables.NpcBufferTable.NpcBufferData;
 import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -34,16 +37,15 @@ import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.taskmanager.AttackStanceTaskManager;
 
-import gnu.trove.map.hash.TIntIntHashMap;
-
 /**
- * The Class L2NpcBufferInstance.
+ * The Class L2NpcBufferInstance.<br>
+ * Zoey76: TODO: Unhardcode as DP base script for NPC Buffers.
  */
 public class L2NpcBufferInstance extends L2Npc
 {
-	static final Logger _log = Logger.getLogger(L2NpcBufferInstance.class.getName());
+	private static final Logger _log = Logger.getLogger(L2NpcBufferInstance.class.getName());
 	
-	private static TIntIntHashMap pageVal = new TIntIntHashMap();
+	private static final Map<Integer, Integer> pageVal = new HashMap<>();
 	
 	/**
 	 * Instantiates a new l2 npc buffer instance.
@@ -57,30 +59,27 @@ public class L2NpcBufferInstance extends L2Npc
 	}
 	
 	@Override
-	public void showChatWindow(L2PcInstance playerInstance, int val)
+	public void showChatWindow(L2PcInstance player, int val)
 	{
-		if (playerInstance == null)
+		if (player == null)
 		{
 			return;
 		}
 		
-		String htmContent = HtmCache.getInstance().getHtm(playerInstance.getHtmlPrefix(), "data/html/mods/NpcBuffer.htm");
-		
+		String htmContent = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), "data/html/mods/NpcBuffer.htm");
 		if (val > 0)
 		{
-			htmContent = HtmCache.getInstance().getHtm(playerInstance.getHtmlPrefix(), "data/html/mods/NpcBuffer-" + val + ".htm");
+			htmContent = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), "data/html/mods/NpcBuffer-" + val + ".htm");
 		}
 		
 		if (htmContent != null)
 		{
 			NpcHtmlMessage npcHtmlMessage = new NpcHtmlMessage(getObjectId());
-			
 			npcHtmlMessage.setHtml(htmContent);
 			npcHtmlMessage.replace("%objectId%", String.valueOf(getObjectId()));
-			playerInstance.sendPacket(npcHtmlMessage);
+			player.sendPacket(npcHtmlMessage);
 		}
-		
-		playerInstance.sendPacket(ActionFailed.STATIC_PACKET);
+		player.sendPacket(ActionFailed.STATIC_PACKET);
 	}
 	
 	@Override
@@ -105,7 +104,6 @@ public class L2NpcBufferInstance extends L2Npc
 		}
 		
 		int npcId = getNpcId();
-		
 		if (command.startsWith("Chat"))
 		{
 			int val = Integer.parseInt(command.substring(5));
@@ -128,24 +126,17 @@ public class L2NpcBufferInstance extends L2Npc
 				
 				int buffGroup = Integer.parseInt(buffGroupList);
 				
-				int[] npcBuffGroupInfo = NpcBufferTable.getInstance().getSkillInfo(npcId, buffGroup);
-				
+				final NpcBufferData npcBuffGroupInfo = NpcBufferTable.getInstance().getSkillInfo(npcId, buffGroup);
 				if (npcBuffGroupInfo == null)
 				{
 					_log.warning("NPC Buffer Warning: npcId = " + npcId + " Location: " + getX() + ", " + getY() + ", " + getZ() + " Player: " + player.getName() + " has tried to use skill group (" + buffGroup + ") not assigned to the NPC Buffer!");
 					return;
 				}
 				
-				int skillId = npcBuffGroupInfo[0];
-				int skillLevel = npcBuffGroupInfo[1];
-				int skillFeeId = npcBuffGroupInfo[2];
-				int skillFeeAmount = npcBuffGroupInfo[3];
-				
-				if (skillFeeId != 0)
+				if (npcBuffGroupInfo.getFee().getId() != 0)
 				{
-					L2ItemInstance itemInstance = player.getInventory().getItemByItemId(skillFeeId);
-					
-					if ((itemInstance == null) || (!itemInstance.isStackable() && (player.getInventory().getInventoryItemCount(skillFeeId, -1) < skillFeeAmount)))
+					L2ItemInstance itemInstance = player.getInventory().getItemByItemId(npcBuffGroupInfo.getFee().getId());
+					if ((itemInstance == null) || (!itemInstance.isStackable() && (player.getInventory().getInventoryItemCount(npcBuffGroupInfo.getFee().getId(), -1) < npcBuffGroupInfo.getFee().getCount())))
 					{
 						SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.THERE_ARE_NOT_ENOUGH_NECESSARY_ITEMS_TO_USE_THE_SKILL);
 						player.sendPacket(sm);
@@ -154,7 +145,7 @@ public class L2NpcBufferInstance extends L2Npc
 					
 					if (itemInstance.isStackable())
 					{
-						if (!player.destroyItemByItemId("Npc Buffer", skillFeeId, skillFeeAmount, player.getTarget(), true))
+						if (!player.destroyItemByItemId("Npc Buffer", npcBuffGroupInfo.getFee().getId(), npcBuffGroupInfo.getFee().getCount(), player.getTarget(), true))
 						{
 							SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.THERE_ARE_NOT_ENOUGH_NECESSARY_ITEMS_TO_USE_THE_SKILL);
 							player.sendPacket(sm);
@@ -163,16 +154,14 @@ public class L2NpcBufferInstance extends L2Npc
 					}
 					else
 					{
-						for (int i = 0; i < skillFeeAmount; ++i)
+						for (int i = 0; i < npcBuffGroupInfo.getFee().getCount(); ++i)
 						{
-							player.destroyItemByItemId("Npc Buffer", skillFeeId, 1, player.getTarget(), true);
+							player.destroyItemByItemId("Npc Buffer", npcBuffGroupInfo.getFee().getId(), 1, player.getTarget(), true);
 						}
 					}
 				}
 				
-				L2Skill skill;
-				skill = SkillTable.getInstance().getInfo(skillId, skillLevel);
-				
+				final L2Skill skill = SkillTable.getInstance().getInfo(npcBuffGroupInfo.getSkill().getSkillId(), npcBuffGroupInfo.getSkill().getSkillLvl());
 				if (skill != null)
 				{
 					skill.getEffects(player, target);