Procházet zdrojové kódy

fix by DrHouse:

Two little performance tunning:
List<Integer> -> int[]
Collection.contains() ->  Arrays.binarySearch()
Faster checks before heavier ones
Also fixing a little bug that nobody had noticed yet (pet list were not checked, just actor was checked twice)
janiii před 16 roky
rodič
revize
f1434cf1d5

+ 20 - 12
L2_GameServer/java/net/sf/l2j/Config.java

@@ -21,6 +21,7 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.math.BigInteger;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -613,8 +614,8 @@ public final class Config
 	public static int KARMA_PK_LIMIT;
 	public static String KARMA_NONDROPPABLE_PET_ITEMS;
 	public static String KARMA_NONDROPPABLE_ITEMS;
-	public static List<Integer> KARMA_LIST_NONDROPPABLE_PET_ITEMS = new FastList<Integer>();
-	public static List<Integer> KARMA_LIST_NONDROPPABLE_ITEMS = new FastList<Integer>();
+	public static int[] KARMA_LIST_NONDROPPABLE_PET_ITEMS;
+	public static int[] KARMA_LIST_NONDROPPABLE_ITEMS;
 
 
 	//--------------------------------------------------
@@ -1858,16 +1859,23 @@ public final class Config
 					KARMA_PK_LIMIT = Integer.parseInt(pvpSettings.getProperty("MinimumPKRequiredToDrop", "5"));
 					KARMA_NONDROPPABLE_PET_ITEMS = pvpSettings.getProperty("ListOfPetItems", "2375,3500,3501,3502,4422,4423,4424,4425,6648,6649,6650,9882");
 					KARMA_NONDROPPABLE_ITEMS = pvpSettings.getProperty("ListOfNonDroppableItems", "57,1147,425,1146,461,10,2368,7,6,2370,2369,6842,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,7694,8181,5575,7694,9388,9389,9390");
-					KARMA_LIST_NONDROPPABLE_PET_ITEMS = new FastList<Integer>();
-					for (String id : KARMA_NONDROPPABLE_PET_ITEMS.split(","))
-					{
-						KARMA_LIST_NONDROPPABLE_PET_ITEMS.add(Integer.parseInt(id));
-					}
-					KARMA_LIST_NONDROPPABLE_ITEMS = new FastList<Integer>();
-					for (String id : KARMA_NONDROPPABLE_ITEMS.split(","))
-					{
-						KARMA_LIST_NONDROPPABLE_ITEMS.add(Integer.parseInt(id));
-					}
+					
+					String[] array = KARMA_NONDROPPABLE_PET_ITEMS.split(",");
+					KARMA_LIST_NONDROPPABLE_PET_ITEMS = new int[array.length];
+					
+					for (int i = 0; i < array.length; i++)
+						KARMA_LIST_NONDROPPABLE_PET_ITEMS[i] = Integer.parseInt(array[i]);
+					
+					array = KARMA_NONDROPPABLE_ITEMS.split(",");
+					KARMA_LIST_NONDROPPABLE_ITEMS = new int[array.length];
+					
+					for (int i = 0; i < array.length; i++)
+						KARMA_LIST_NONDROPPABLE_ITEMS[i] = Integer.parseInt(array[i]);
+					
+					// sorting so binarySearch can be used later
+					Arrays.sort(KARMA_LIST_NONDROPPABLE_PET_ITEMS);
+					Arrays.sort(KARMA_LIST_NONDROPPABLE_ITEMS);
+					
 					PVP_NORMAL_TIME = Integer.parseInt(pvpSettings.getProperty("PvPVsNormalTime", "120000"));
 					PVP_PVP_TIME = Integer.parseInt(pvpSettings.getProperty("PvPVsPvPTime", "60000"));
 				}

+ 3 - 6
L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java

@@ -5239,9 +5239,6 @@ public final class L2PcInstance extends L2Playable
 
 				int itemDropPercent = 0;
 
-				List<Integer> nonDroppableList = Config.KARMA_LIST_NONDROPPABLE_ITEMS;
-				List<Integer> nonDroppableListPet = Config.KARMA_LIST_NONDROPPABLE_ITEMS;
-
 				for (L2ItemInstance itemDrop : getInventory().getItems())
 				{
 					// Don't drop
@@ -5251,9 +5248,9 @@ public final class L2PcInstance extends L2Playable
 							!itemDrop.isDropable() ||
 							itemDrop.getItemId() == 57 || // Adena
 							itemDrop.getItem().getType2() == L2Item.TYPE2_QUEST ||                  // Quest Items
-							nonDroppableList.contains(itemDrop.getItemId()) ||                      // Item listed in the non droppable item list
-							nonDroppableListPet.contains(itemDrop.getItemId()) ||                   // Item listed in the non droppable pet item list
-							getPet() != null && getPet().getControlItemId() == itemDrop.getItemId() // Control Item of active pet
+							getPet() != null && getPet().getControlItemId() == itemDrop.getItemId() || // Control Item of active pet
+							Arrays.binarySearch(Config.KARMA_LIST_NONDROPPABLE_ITEMS, itemDrop.getItemId()) >= 0 || // Item listed in the non droppable item list
+							Arrays.binarySearch(Config.KARMA_LIST_NONDROPPABLE_PET_ITEMS, itemDrop.getItemId()) >= 0 // Item listed in the non droppable pet item list
 					) continue;
 
 					if (itemDrop.isEquipped())