浏览代码

BETA: Removing completely Trove from Datapack:
* Requires [L5565]
* Using !ItemHolder instead of int![2].
* Using Arrays.asList() for static lists, try to use this way too.
* Adding method public void registerMobs(Collection<Integer> mobs, !QuestEventType... types) to L2AttackableAIScript.

Zoey76 12 年之前
父节点
当前提交
92489339a0
共有 21 个文件被更改,包括 778 次插入497 次删除
  1. 1 2
      L2J_DataPack_BETA/.classpath
  2. 12 0
      L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/L2AttackableAIScript.java
  3. 31 66
      L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PolymorphingOnAttack.java
  4. 29 84
      L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SummonMinions.java
  5. 3 3
      L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Antharas.java
  6. 5 2
      L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Ranku.java
  7. 9 8
      L2J_DataPack_BETA/dist/game/data/scripts/conquerablehalls/DevastatedCastle/DevastatedCastle.java
  8. 7 5
      L2J_DataPack_BETA/dist/game/data/scripts/conquerablehalls/FortressOfResistance/FortressOfResistance.java
  9. 8 8
      L2J_DataPack_BETA/dist/game/data/scripts/conquerablehalls/FortressOfTheDead/FortressOfTheDead.java
  10. 3 5
      L2J_DataPack_BETA/dist/game/data/scripts/conquerablehalls/RainbowSpringsChateau/RainbowSpringsChateau.java
  11. 32 24
      L2J_DataPack_BETA/dist/game/data/scripts/conquerablehalls/flagwar/FlagWar.java
  12. 3 2
      L2J_DataPack_BETA/dist/game/data/scripts/custom/KetraOrcSupport/KetraOrcSupport.java
  13. 3 2
      L2J_DataPack_BETA/dist/game/data/scripts/custom/VarkaSilenosSupport/VarkaSilenosSupport.java
  14. 6 5
      L2J_DataPack_BETA/dist/game/data/scripts/hellbound/TullyWorkshop/TullyWorkshop.java
  15. 526 181
      L2J_DataPack_BETA/dist/game/data/scripts/instances/DarkCloudMansion/DarkCloudMansion.java
  16. 5 6
      L2J_DataPack_BETA/dist/game/data/scripts/instances/FinalEmperialTomb/FinalEmperialTomb.java
  17. 5 6
      L2J_DataPack_BETA/dist/game/data/scripts/instances/SeedOfDestruction/Stage1.java
  18. 18 17
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00508_AClansReputation/Q00508_AClansReputation.java
  19. 16 15
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00509_AClansFame/Q00509_AClansFame.java
  20. 4 4
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00511_AwlUnderFoot/Q00511_AwlUnderFoot.java
  21. 52 52
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00692_HowtoOpposeEvil/Q00692_HowtoOpposeEvil.java

+ 1 - 2
L2J_DataPack_BETA/.classpath

@@ -6,6 +6,5 @@
 	<classpathentry kind="lib" path="/L2J_Server_BETA/dist/libs/javolution-5.5.1.jar" />
 	<classpathentry kind="lib" path="/L2J_Server_BETA/dist/libs/mmocore.jar" />
 	<classpathentry kind="lib" path="/L2J_Server_BETA/dist/libs/netcon-1.7.jar" />
-	<classpathentry kind="lib" path="/L2J_Server_BETA/dist/libs/trove-3.0.2.jar" />
 	<classpathentry kind="output" path="bin" />
-</classpath>
+</classpath>

+ 12 - 0
L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/L2AttackableAIScript.java

@@ -16,6 +16,7 @@ package ai.group_template;
 
 import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
 
+import java.util.Collection;
 import java.util.List;
 
 import com.l2jserver.Config;
@@ -81,6 +82,17 @@ public class L2AttackableAIScript extends QuestJython
 		}
 	}
 	
+	public void registerMobs(Collection<Integer> mobs, QuestEventType... types)
+	{
+		for (int id : mobs)
+		{
+			for (QuestEventType type : types)
+			{
+				addEventId(id, type);
+			}
+		}
+	}
+	
 	public L2AttackableAIScript (int questId, String name, String descr)
 	{
 		super(questId, name, descr);

+ 31 - 66
L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/PolymorphingOnAttack.java

@@ -14,7 +14,10 @@
  */
 package ai.group_template;
 
-import gnu.trove.map.hash.TIntObjectHashMap;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.model.actor.L2Attackable;
@@ -26,84 +29,46 @@ import com.l2jserver.gameserver.network.clientpackets.Say2;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
 
 /**
+ * Polymorphing on attack monsters AI.
  * @author Slyce
  */
 public class PolymorphingOnAttack extends L2AttackableAIScript
 {
-	private static final TIntObjectHashMap<Integer[]> MOBSPAWNS = new TIntObjectHashMap<>();
+	private static final Map<Integer, List<Integer>> MOBSPAWNS = new HashMap<>();
 	
 	static
 	{
-		MOBSPAWNS.put(21258, new Integer[]
-		{
-			21259, 100, 100, -1
-		}); // Fallen Orc Shaman -> Sharp Talon Tiger (always polymorphs)
-		MOBSPAWNS.put(21261, new Integer[]
-		{
-			21262, 100, 20, 0
-		}); // Ol Mahum Transcender 1st stage
-		MOBSPAWNS.put(21262, new Integer[]
-		{
-			21263, 100, 10, 1
-		}); // Ol Mahum Transcender 2nd stage
-		MOBSPAWNS.put(21263, new Integer[]
-		{
-			21264, 100, 5, 2
-		}); // Ol Mahum Transcender 3rd stage
-		MOBSPAWNS.put(21265, new Integer[]
-		{
-			21271, 100, 33, 0
-		}); // Cave Ant Larva -> Cave Ant
-		MOBSPAWNS.put(21266, new Integer[]
-		{
-			21269, 100, 100, -1
-		}); // Cave Ant Larva -> Cave Ant (always polymorphs)
-		MOBSPAWNS.put(21267, new Integer[]
-		{
-			21270, 100, 100, -1
-		}); // Cave Ant Larva -> Cave Ant Soldier (always polymorphs)
-		MOBSPAWNS.put(21271, new Integer[]
-		{
-			21272, 66, 10, 1
-		}); // Cave Ant -> Cave Ant Soldier
-		MOBSPAWNS.put(21272, new Integer[]
-		{
-			21273, 33, 5, 2
-		}); // Cave Ant Soldier -> Cave Noble Ant
-		MOBSPAWNS.put(21521, new Integer[]
-		{
-			21522, 100, 30, -1
-		}); // Claws of Splendor
-		MOBSPAWNS.put(21527, new Integer[]
-		{
-			21528, 100, 30, -1
-		}); // Anger of Splendor
-		MOBSPAWNS.put(21533, new Integer[]
-		{
-			21534, 100, 30, -1
-		}); // Alliance of Splendor
-		MOBSPAWNS.put(21537, new Integer[]
-		{
-			21538, 100, 30, -1
-		}); // Fang of Splendor
+		MOBSPAWNS.put(21258, Arrays.asList(21259, 100, 100, -1)); // Fallen Orc Shaman -> Sharp Talon Tiger (always polymorphs)
+		MOBSPAWNS.put(21261, Arrays.asList(21262, 100, 20, 0)); // Ol Mahum Transcender 1st stage
+		MOBSPAWNS.put(21262, Arrays.asList(21263, 100, 10, 1)); // Ol Mahum Transcender 2nd stage
+		MOBSPAWNS.put(21263, Arrays.asList(21264, 100, 5, 2)); // Ol Mahum Transcender 3rd stage
+		MOBSPAWNS.put(21265, Arrays.asList(21271, 100, 33, 0)); // Cave Ant Larva -> Cave Ant
+		MOBSPAWNS.put(21266, Arrays.asList(21269, 100, 100, -1)); // Cave Ant Larva -> Cave Ant (always polymorphs)
+		MOBSPAWNS.put(21267, Arrays.asList(21270, 100, 100, -1)); // Cave Ant Larva -> Cave Ant Soldier (always polymorphs)
+		MOBSPAWNS.put(21271, Arrays.asList(21272, 66, 10, 1)); // Cave Ant -> Cave Ant Soldier
+		MOBSPAWNS.put(21272, Arrays.asList(21273, 33, 5, 2)); // Cave Ant Soldier -> Cave Noble Ant
+		MOBSPAWNS.put(21521, Arrays.asList(21522, 100, 30, -1)); // Claws of Splendor
+		MOBSPAWNS.put(21527, Arrays.asList(21528, 100, 30, -1)); // Anger of Splendor
+		MOBSPAWNS.put(21533, Arrays.asList(21534, 100, 30, -1)); // Alliance of Splendor
+		MOBSPAWNS.put(21537, Arrays.asList(21538, 100, 30, -1)); // Fang of Splendor
 	}
 	protected static final NpcStringId[][] MOBTEXTS =
 	{
 		new NpcStringId[]
 		{
-			NpcStringId.ENOUGH_FOOLING_AROUND_GET_READY_TO_DIE, 
+			NpcStringId.ENOUGH_FOOLING_AROUND_GET_READY_TO_DIE,
 			NpcStringId.YOU_IDIOT_IVE_JUST_BEEN_TOYING_WITH_YOU,
 			NpcStringId.NOW_THE_FUN_STARTS
-		}, 
+		},
 		new NpcStringId[]
 		{
 			NpcStringId.I_MUST_ADMIT_NO_ONE_MAKES_MY_BLOOD_BOIL_QUITE_LIKE_YOU_DO,
-			NpcStringId.NOW_THE_BATTLE_BEGINS, 
+			NpcStringId.NOW_THE_BATTLE_BEGINS,
 			NpcStringId.WITNESS_MY_TRUE_POWER
-		}, 
+		},
 		new NpcStringId[]
 		{
-			NpcStringId.PREPARE_TO_DIE, 
+			NpcStringId.PREPARE_TO_DIE,
 			NpcStringId.ILL_DOUBLE_MY_STRENGTH,
 			NpcStringId.YOU_HAVE_MORE_SKILL_THAN_I_THOUGHT
 		}
@@ -112,7 +77,7 @@ public class PolymorphingOnAttack extends L2AttackableAIScript
 	public PolymorphingOnAttack(int questId, String name, String descr)
 	{
 		super(questId, name, descr);
-		registerMobs(MOBSPAWNS.keys(), QuestEventType.ON_ATTACK);
+		registerMobs(MOBSPAWNS.keySet(), QuestEventType.ON_ATTACK);
 	}
 	
 	@Override
@@ -120,19 +85,19 @@ public class PolymorphingOnAttack extends L2AttackableAIScript
 	{
 		if (npc.isVisible() && !npc.isDead())
 		{
-			final Integer[] tmp = MOBSPAWNS.get(npc.getNpcId());
+			final List<Integer> tmp = MOBSPAWNS.get(npc.getNpcId());
 			if (tmp != null)
 			{
-				if (npc.getCurrentHp() <= (npc.getMaxHp() * tmp[1] / 100.0) && getRandom(100) < tmp[2])
+				if ((npc.getCurrentHp() <= ((npc.getMaxHp() * tmp.get(1)) / 100.0)) && (getRandom(100) < tmp.get(2)))
 				{
-					if (tmp[3] >= 0)
+					if (tmp.get(3) >= 0)
 					{
-						NpcStringId npcString = MOBTEXTS[tmp[3]][getRandom(MOBTEXTS[tmp[3]].length)];
+						NpcStringId npcString = MOBTEXTS[tmp.get(3)][getRandom(MOBTEXTS[tmp.get(3)].length)];
 						npc.broadcastPacket(new CreatureSay(npc.getObjectId(), Say2.ALL, npc.getName(), npcString));
 						
 					}
 					npc.deleteMe();
-					L2Attackable newNpc = (L2Attackable) addSpawn(tmp[0], npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+					L2Attackable newNpc = (L2Attackable) addSpawn(tmp.get(0), npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
 					L2Character originalAttacker = isPet ? attacker.getPet() : attacker;
 					newNpc.setRunning();
 					newNpc.addDamageHate(originalAttacker, 0, 500);
@@ -145,6 +110,6 @@ public class PolymorphingOnAttack extends L2AttackableAIScript
 	
 	public static void main(String[] args)
 	{
-		new PolymorphingOnAttack(-1, "polymorphing_on_attack", "ai");
+		new PolymorphingOnAttack(-1, PolymorphingOnAttack.class.getSimpleName(), "ai");
 	}
 }

+ 29 - 84
L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/SummonMinions.java

@@ -14,8 +14,13 @@
  */
 package ai.group_template;
 
-import gnu.trove.map.hash.TIntObjectHashMap;
-import gnu.trove.set.hash.TIntHashSet;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 import javolution.util.FastList;
 import javolution.util.FastMap;
 
@@ -33,112 +38,54 @@ import com.l2jserver.gameserver.network.serverpackets.NpcSay;
 public class SummonMinions extends L2AttackableAIScript
 {
 	private static int HasSpawned;
-	private static TIntHashSet myTrackingSet = new TIntHashSet(); // Used to track instances of npcs
+	private static Set<Integer> myTrackingSet = new HashSet<>(); // Used to track instances of npcs
 	private final FastMap<Integer, FastList<L2PcInstance>> _attackersList = new FastMap<Integer, FastList<L2PcInstance>>().shared();
-	private static final TIntObjectHashMap<int[]> MINIONS = new TIntObjectHashMap<>();
+	private static final Map<Integer, List<Integer>> MINIONS = new HashMap<>();
 	
 	static
 	{
 		// Timak Orc Troop
-		MINIONS.put(20767, new int[]
-		{
-			20768,
-			20769,
-			20770
-		});
+		MINIONS.put(20767, Arrays.asList(20768, 20769, 20770));
 		// Ragna Orc Shaman
-		// MINIONS.put(22030,new Integer[]{22045,22047,22048});
+		// MINIONS.put(22030, Arrays.asList(22045, 22047, 22048));
 		// Ragna Orc Warrior - summons shaman but not 22030 ><
-		// MINIONS.put(22032,new Integer[]{22036});
+		// MINIONS.put(22032, Arrays.asList(22036));
 		// Ragna Orc Hero
-		// MINIONS.put(22038,new Integer[]{22037});
+		// MINIONS.put(22038, Arrays.asList(22037));
 		// Blade of Splendor
-		MINIONS.put(21524, new int[]
-		{
-			21525
-		});
+		MINIONS.put(21524, Arrays.asList(21525));
 		// Punishment of Splendor
-		MINIONS.put(21531, new int[]
-		{
-			21658
-		});
+		MINIONS.put(21531, Arrays.asList(21658));
 		// Wailing of Splendor
-		MINIONS.put(21539, new int[]
-		{
-			21540
-		});
+		MINIONS.put(21539, Arrays.asList(21540));
 		// Island Guardian
-		MINIONS.put(22257, new int[]
-		{
-			18364,
-			18364
-		});
+		MINIONS.put(22257, Arrays.asList(18364, 18364));
 		// White Sand Mirage
-		MINIONS.put(22258, new int[]
-		{
-			18364,
-			18364
-		});
+		MINIONS.put(22258, Arrays.asList(18364, 18364));
 		// Muddy Coral
-		MINIONS.put(22259, new int[]
-		{
-			18364,
-			18364
-		});
+		MINIONS.put(22259, Arrays.asList(18364, 18364));
 		// Kleopora
-		MINIONS.put(22260, new int[]
-		{
-			18364,
-			18364
-		});
+		MINIONS.put(22260, Arrays.asList(18364, 18364));
 		// Seychelles
-		MINIONS.put(22261, new int[]
-		{
-			18365,
-			18365
-		});
+		MINIONS.put(22261, Arrays.asList(18365, 18365));
 		// Naiad
-		MINIONS.put(22262, new int[]
-		{
-			18365,
-			18365
-		});
+		MINIONS.put(22262, Arrays.asList(18365, 18365));
 		// Sonneratia
-		MINIONS.put(22263, new int[]
-		{
-			18365,
-			18365
-		});
+		MINIONS.put(22263, Arrays.asList(18365, 18365));
 		// Castalia
-		MINIONS.put(22264, new int[]
-		{
-			18366,
-			18366
-		});
+		MINIONS.put(22264, Arrays.asList(18366, 18366));
 		// Chrysocolla
-		MINIONS.put(22265, new int[]
-		{
-			18366,
-			18366
-		});
+		MINIONS.put(22265, Arrays.asList(18366, 18366));
 		// Pythia
-		MINIONS.put(22266, new int[]
-		{
-			18366,
-			18366
-		});
+		MINIONS.put(22266, Arrays.asList(18366, 18366));
 		// Tanta Lizardman Summoner
-		MINIONS.put(22774, new int[]
-		{
-			22768,
-			22768
-		});
+		MINIONS.put(22774, Arrays.asList(22768, 22768));
 	}
 	
 	public SummonMinions(int questId, String name, String descr)
 	{
 		super(questId, name, descr);
-		registerMobs(MINIONS.keys(), QuestEventType.ON_ATTACK, QuestEventType.ON_KILL);
+		registerMobs(MINIONS.keySet(), QuestEventType.ON_ATTACK, QuestEventType.ON_KILL);
 	}
 	
 	@Override
@@ -170,15 +117,13 @@ public class SummonMinions extends L2AttackableAIScript
 							HasSpawned = 0;
 							if (getRandom(100) < 33) // mobs that summon minions only on certain chance
 							{
-								int[] minions = MINIONS.get(npcId);
-								for (int val : minions)
+								for (int val : MINIONS.get(npcId))
 								{
 									L2Attackable newNpc = (L2Attackable) this.addSpawn(val, (npc.getX() + getRandom(-150, 150)), (npc.getY() + getRandom(-150, 150)), npc.getZ(), 0, false, 0);
 									newNpc.setRunning();
 									newNpc.addDamageHate(attacker, 0, 999);
 									newNpc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, attacker);
 								}
-								minions = null;
 							}
 						}
 						break;

+ 3 - 3
L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Antharas.java

@@ -14,14 +14,14 @@
  */
 package ai.individual;
 
-import gnu.trove.map.hash.TIntObjectHashMap;
-
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.ScheduledFuture;
 import java.util.logging.Logger;
 
 import javolution.util.FastList;
+import javolution.util.FastMap;
 import ai.group_template.L2AttackableAIScript;
 
 import com.l2jserver.Config;
@@ -89,7 +89,7 @@ public class Antharas extends L2AttackableAIScript
 	protected List<L2Npc> _teleportCube = new FastList<>();
 	
 	// Spawn data of monsters.
-	protected TIntObjectHashMap<L2Spawn> _monsterSpawn = new TIntObjectHashMap<>();
+	protected Map<Integer, L2Spawn> _monsterSpawn = new FastMap<>();
 	
 	// Instance of monsters.
 	protected List<L2Npc> _monsters = new FastList<>();

+ 5 - 2
L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/Ranku.java

@@ -14,7 +14,9 @@
  */
 package ai.individual;
 
-import gnu.trove.set.hash.TIntHashSet;
+import java.util.HashSet;
+import java.util.Set;
+
 import ai.group_template.L2AttackableAIScript;
 
 import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -27,6 +29,7 @@ import com.l2jserver.gameserver.network.serverpackets.NpcSay;
 import com.l2jserver.gameserver.util.MinionList;
 
 /**
+ * Ranku's AI.
  * @author GKR
  */
 public class Ranku extends L2AttackableAIScript
@@ -35,7 +38,7 @@ public class Ranku extends L2AttackableAIScript
 	private static final int MINION = 32305;
 	private static final int MINION_2 = 25543;
 	
-	private static TIntHashSet myTrackingSet = new TIntHashSet();
+	private static Set<Integer> myTrackingSet = new HashSet<>();
 	
 	@Override
 	public final String onAdvEvent(String event, L2Npc npc, L2PcInstance player)

+ 9 - 8
L2J_DataPack_BETA/dist/game/data/scripts/conquerablehalls/DevastatedCastle/DevastatedCastle.java

@@ -14,7 +14,9 @@
  */
 package conquerablehalls.DevastatedCastle;
 
-import gnu.trove.map.hash.TIntIntHashMap;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
 
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.datatables.ClanTable;
@@ -39,7 +41,7 @@ public final class DevastatedCastle extends ClanHallSiegeEngine
 	private static final int DIETRICH = 35408;
 	private static final double GUSTAV_TRIGGER_HP = NpcTable.getInstance().getTemplate(GUSTAV).getBaseHpMax() / 12;
 	
-	private static TIntIntHashMap _damageToGustav = new TIntIntHashMap();
+	private static Map<Integer, Integer> _damageToGustav = new HashMap<>();
 
 	public DevastatedCastle(int questId, String name, String descr, int hallId)
 	{
@@ -118,19 +120,18 @@ public final class DevastatedCastle extends ClanHallSiegeEngine
 	@Override
 	public L2Clan getWinner()
 	{
-		double counter = 0;
+		int counter = 0;
 		int damagest = 0;
-		for(int clan : _damageToGustav.keys())
+		for(Entry<Integer, Integer> e : _damageToGustav.entrySet())
 		{
-			final double damage = _damageToGustav.get(clan);
+			final int damage = e.getValue();
 			if(damage > counter)
 			{
 				counter = damage;
-				damagest = clan;
+				damagest = e.getKey();
 			}
 		}
-		L2Clan winner = ClanTable.getInstance().getClan(damagest);
-		return winner;
+		return ClanTable.getInstance().getClan(damagest);
 	}
 	
 	public static void main(String[] args)

+ 7 - 5
L2J_DataPack_BETA/dist/game/data/scripts/conquerablehalls/FortressOfResistance/FortressOfResistance.java

@@ -14,7 +14,9 @@
  */
 package conquerablehalls.FortressOfResistance;
 
-import gnu.trove.map.hash.TIntLongHashMap;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
 
 import com.l2jserver.gameserver.cache.HtmCache;
 import com.l2jserver.gameserver.datatables.ClanTable;
@@ -46,7 +48,7 @@ public final class FortressOfResistance extends ClanHallSiegeEngine
 	};
 	
 	private L2Spawn _nurka; 
-	private TIntLongHashMap _damageToNurka = new TIntLongHashMap();
+	private Map<Integer, Long> _damageToNurka = new HashMap<>();
 	private NpcHtmlMessage _messengerMsg;
 	
 	/**
@@ -148,12 +150,12 @@ public final class FortressOfResistance extends ClanHallSiegeEngine
 	{
 		int winnerId = 0;
 		long counter = 0;
-		for(int i : _damageToNurka.keys())
+		for(Entry<Integer, Long> e : _damageToNurka.entrySet())
 		{	
-			long dam = _damageToNurka.get(i);
+			long dam = e.getValue();
 			if(dam > counter)
 			{
-				winnerId = i;
+				winnerId = e.getKey();
 				counter = dam;
 			}
 		}

+ 8 - 8
L2J_DataPack_BETA/dist/game/data/scripts/conquerablehalls/FortressOfTheDead/FortressOfTheDead.java

@@ -14,7 +14,9 @@
  */
 package conquerablehalls.FortressOfTheDead;
 
-import gnu.trove.map.hash.TIntIntHashMap;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
 
 import com.l2jserver.gameserver.GameTimeController;
 import com.l2jserver.gameserver.ThreadPoolManager;
@@ -37,7 +39,7 @@ public final class FortressOfTheDead extends ClanHallSiegeEngine
 	private static final int ALFRED = 35630;
 	private static final int GISELLE = 35631;
 	
-	private static TIntIntHashMap _damageToLidia = new TIntIntHashMap();
+	private static Map<Integer, Integer> _damageToLidia = new HashMap<>();
 	
 	/**
 	 * @param questId
@@ -125,13 +127,13 @@ public final class FortressOfTheDead extends ClanHallSiegeEngine
 	{
 		int counter = 0;
 		int damagest = 0;
-		for(int clan : _damageToLidia.keys())
+		for(Entry<Integer, Integer> e : _damageToLidia.entrySet())
 		{
-			final int damage = _damageToLidia.get(clan);
+			final int damage = e.getValue();
 			if(damage > counter)
 			{
 				counter = damage;
-				damagest = clan;
+				damagest = e.getKey();
 			}
 		}
 		return ClanTable.getInstance().getClan(damagest);
@@ -140,9 +142,7 @@ public final class FortressOfTheDead extends ClanHallSiegeEngine
 	@Override
 	public void startSiege()
 	{
-		/*
-		 * Siege must start at night
-		 */
+		// Siege must start at night
 		int hoursLeft = (GameTimeController.getInstance().getGameTime() / 60) % 24;
 		
 		if(hoursLeft < 0 || hoursLeft > 6)

+ 3 - 5
L2J_DataPack_BETA/dist/game/data/scripts/conquerablehalls/RainbowSpringsChateau/RainbowSpringsChateau.java

@@ -14,8 +14,6 @@
  */
 package conquerablehalls.RainbowSpringsChateau;
 
-import gnu.trove.map.hash.TIntLongHashMap;
-
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
@@ -92,7 +90,7 @@ public class RainbowSpringsChateau extends Quest
 				{
 					long counter = 0;
 					L2Clan clan = null;
-					for (int clanId : _warDecreesCount.keys())
+					for (int clanId : _warDecreesCount.keySet())
 					{
 						L2Clan actingClan = ClanTable.getInstance().getClan(clanId);
 						if ((actingClan == null) || (actingClan.getDissolvingExpiryTime() > 0))
@@ -282,7 +280,7 @@ public class RainbowSpringsChateau extends Quest
 		SkillTable.getInstance().getInfo(0, 1)
 	};
 	
-	protected static TIntLongHashMap _warDecreesCount = new TIntLongHashMap();
+	protected static Map<Integer, Long> _warDecreesCount = new HashMap<>();
 	protected static List<L2Clan> _acceptedClans = new ArrayList<>(4);
 	private static Map<String, ArrayList<L2Clan>> _usedTextPassages = new HashMap<>();
 	private static Map<L2Clan, Integer> _pendingItemToGet = new HashMap<>();
@@ -448,7 +446,7 @@ public class RainbowSpringsChateau extends Quest
 					case "unregister":
 						if (_rainbow.isRegistering())
 						{
-							if (_warDecreesCount.contains(clan.getClanId()))
+							if (_warDecreesCount.containsKey(clan.getClanId()))
 							{
 								player.addItem("Rainbow Spring unregister", WAR_DECREES, _warDecreesCount.get(clan.getClanId()) / 2, npc, true);
 								_warDecreesCount.remove(clan.getClanId());

+ 32 - 24
L2J_DataPack_BETA/dist/game/data/scripts/conquerablehalls/flagwar/FlagWar.java

@@ -14,12 +14,14 @@
  */
 package conquerablehalls.flagwar;
 
-import gnu.trove.map.hash.TIntObjectHashMap;
-
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
 
 import com.l2jserver.L2DatabaseFactory;
 import com.l2jserver.gameserver.Announcements;
@@ -91,7 +93,7 @@ public abstract class FlagWar extends ClanHallSiegeEngine
 	
 	protected static L2CharPosition CENTER;
 	
-	protected TIntObjectHashMap<ClanData> _data =  new TIntObjectHashMap<>(6);
+	protected Map<Integer, ClanData> _data =  new HashMap<>(6);
 	protected L2Clan _winner;
 	private boolean _firstPhase;
 	
@@ -284,20 +286,22 @@ public abstract class FlagWar extends ClanHallSiegeEngine
 			else
 			{
 				html = HtmCache.getInstance().getHtm(null, "data/scripts/conquerablehalls/flagwar/"+qn+"/messenger_registeredclans.htm");
-				for(int i = 0; i < _data.size(); i++)
+				int i = 0;
+				for(Entry<Integer, ClanData> clanData : _data.entrySet())
 				{
-					L2Clan attacker = ClanTable.getInstance().getClan(_data.keys()[i]);
+					L2Clan attacker = ClanTable.getInstance().getClan(clanData.getKey());
 					if(attacker == null)
 						continue;
 					html = html.replaceAll("%clan"+i+"%", clan.getName());
-					html = html.replaceAll("%clanMem"+i+"%", String.valueOf(_data.values()[i].players.size()));
+					html = html.replaceAll("%clanMem"+i+"%", String.valueOf(clanData.getValue().players.size()));
+					i++;
 				}
 				if(_data.size() < 5)
 				{
-					for(int i = _data.size(); i < 5; i++)
+					for(int c = _data.size(); c < 5; c++)
 					{
-						html = html.replaceAll("%clan"+i+"%", "Empty pos. ");
-						html = html.replaceAll("%clanMem"+i+"%", "Empty pos. ");
+						html = html.replaceAll("%clan"+c+"%", "Empty pos. ");
+						html = html.replaceAll("%clanMem"+c+"%", "Empty pos. ");
 					}
 				}
 			}
@@ -312,22 +316,26 @@ public abstract class FlagWar extends ClanHallSiegeEngine
 		if(_hall.isInSiege())
 		{
 			final int npcId = npc.getNpcId();
-			for(int keys : _data.keys())
+			for(int keys : _data.keySet())
 				if(_data.get(keys).npc == npcId)
 					removeParticipant(keys, true);
-			_data.trimToSize();
 			
 			synchronized(this)
 			{
+				// TODO: Zoey76: previous bad implementation.
+				// Converting map.keySet() to List and map.values() to List doesn't ensure that
+				// first element in the key's List correspond to the first element in the values' List
+				// That's the reason that values aren't copied to a List, instead using _data.get(clanIds.get(0))
+				final List<Integer> clanIds = new ArrayList<>(_data.keySet());
 				if(_firstPhase)
 				{
 					// Siege ends if just 1 flag is alive
-					if((_data.size() == 1 && _hall.getOwnerId() <= 0)	// Hall was free before battle
-						|| _data.values()[0].npc == 0) 					// or owner didnt set the ally npc
+					// Hall was free before battle or owner didn't set the ally npc
+					if((clanIds.size() == 1 && _hall.getOwnerId() <= 0) || (_data.get(clanIds.get(0)).npc == 0))
 					{
 						_missionAccomplished = true;
-						_winner = ClanTable.getInstance().getClan(_data.keys()[0]);
-						removeParticipant(_data.keys()[0], false);
+						//_winner = ClanTable.getInstance().getClan(_data.keySet()[0]);
+						//removeParticipant(_data.keySet()[0], false);
 						cancelSiegeTask();
 						endSiege();
 					}
@@ -350,8 +358,8 @@ public abstract class FlagWar extends ClanHallSiegeEngine
 								for(int doorId : INNER_DOORS_TO_OPEN)
 									_hall.openCloseDoor(doorId, false);
 								
-								for(int i = 0; i< _data.size(); i++)
-									doSpawns(_data.keys()[i], _data.values()[i]);
+								for(Entry<Integer, ClanData> e : _data.entrySet())
+									doSpawns(e.getKey(), e.getValue());
 								
 								_hall.getSiegeZone().setIsActive(true);
 							}
@@ -361,8 +369,8 @@ public abstract class FlagWar extends ClanHallSiegeEngine
 				else
 				{
 					_missionAccomplished = true;
-					_winner = ClanTable.getInstance().getClan(_data.keys()[0]);
-					removeParticipant(_data.keys()[0], false);
+					_winner = ClanTable.getInstance().getClan(clanIds.get(0));
+					removeParticipant(clanIds.get(0), false);
 					endSiege();
 				}
 			}
@@ -466,13 +474,13 @@ public abstract class FlagWar extends ClanHallSiegeEngine
 	@Override
 	public void onSiegeStarts()
 	{
-		for(int i = 1; i < _data.size(); i++)
+		for(Entry<Integer, ClanData> clan : _data.entrySet())
 		{
 			// Spawns challengers flags and npcs
 			try
 			{
-				ClanData data = _data.values()[i];				
-				doSpawns(_data.keys()[i], data);
+				ClanData data = clan.getValue();				
+				doSpawns(clan.getKey(), data);
 				fillPlayerList(data);
 			}
 			catch(Exception e)
@@ -481,7 +489,7 @@ public abstract class FlagWar extends ClanHallSiegeEngine
 				_log.warning(qn+": Problems in siege initialization!");
 				e.printStackTrace();
 			}
-		}	
+		}
 	}
 	
 	@Override
@@ -501,7 +509,7 @@ public abstract class FlagWar extends ClanHallSiegeEngine
 	{
 		if(_data.size() > 0)
 		{
-			for(int clanId : _data.keys())
+			for(int clanId : _data.keySet())
 			{
 				if(_hall.getOwnerId() == clanId)
 					removeParticipant(clanId, false);

+ 3 - 2
L2J_DataPack_BETA/dist/game/data/scripts/custom/KetraOrcSupport/KetraOrcSupport.java

@@ -14,7 +14,8 @@
  */
 package custom.KetraOrcSupport;
 
-import gnu.trove.map.hash.TIntObjectHashMap;
+import java.util.HashMap;
+import java.util.Map;
 
 import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -49,7 +50,7 @@ public class KetraOrcSupport extends Quest
 
 	private static final int HORN = 7186;
 
-	private static final TIntObjectHashMap<BuffsData> BUFF = new TIntObjectHashMap<>();
+	private static final Map<Integer, BuffsData> BUFF = new HashMap<>();
 
 	private class BuffsData
 	{

+ 3 - 2
L2J_DataPack_BETA/dist/game/data/scripts/custom/VarkaSilenosSupport/VarkaSilenosSupport.java

@@ -14,7 +14,8 @@
  */
 package custom.VarkaSilenosSupport;
 
-import gnu.trove.map.hash.TIntObjectHashMap;
+import java.util.HashMap;
+import java.util.Map;
 
 import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -49,7 +50,7 @@ public class VarkaSilenosSupport extends Quest
 
 	private static final int SEED = 7187;
 
-	private static final TIntObjectHashMap<BuffsData> BUFF = new TIntObjectHashMap<>();
+	private static final Map<Integer, BuffsData> BUFF = new HashMap<>();
 
 	private class BuffsData
 	{

+ 6 - 5
L2J_DataPack_BETA/dist/game/data/scripts/hellbound/TullyWorkshop/TullyWorkshop.java

@@ -14,11 +14,11 @@
  */
 package hellbound.TullyWorkshop;
 
-import gnu.trove.set.hash.TIntHashSet;
-
 import java.util.Arrays;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ScheduledFuture;
 
 import javolution.util.FastList;
@@ -113,9 +113,10 @@ public class TullyWorkshop extends Quest
 	
 	// NPC's, spawned after Tully's death are stored here
 	protected static List<L2Npc> postMortemSpawn = new FastList<>();
-	protected static TIntHashSet brokenContraptions = new TIntHashSet();
-	protected static TIntHashSet rewardedContraptions = new TIntHashSet();
-	protected static TIntHashSet talkedContraptions = new TIntHashSet();
+	// TODO: Zoey76: Not thread-safe, probably will lead to problems.
+	protected static Set<Integer> brokenContraptions = new HashSet<>();
+	protected static Set<Integer> rewardedContraptions = new HashSet<>();
+	protected static Set<Integer> talkedContraptions = new HashSet<>();
 	
 	private final List<L2MonsterInstance> spawnedFollowers = new FastList<>();
 	private final List<L2MonsterInstance> spawnedFollowerMinions = new FastList<>();

文件差异内容过多而无法显示
+ 526 - 181
L2J_DataPack_BETA/dist/game/data/scripts/instances/DarkCloudMansion/DarkCloudMansion.java


+ 5 - 6
L2J_DataPack_BETA/dist/game/data/scripts/instances/FinalEmperialTomb/FinalEmperialTomb.java

@@ -14,10 +14,9 @@
  */
 package instances.FinalEmperialTomb;
 
-import gnu.trove.map.hash.TIntObjectHashMap;
-
 import java.io.File;
 import java.util.Calendar;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ScheduledFuture;
@@ -146,8 +145,8 @@ public class FinalEmperialTomb extends Quest
 	private static final int MAX_PLAYERS = 45;
 	private static final boolean debug = false;
 	
-	private final TIntObjectHashMap<L2Territory> _spawnZoneList = new TIntObjectHashMap<>();
-	private final TIntObjectHashMap<List<FETSpawn>> _spawnList = new TIntObjectHashMap<>();
+	private final Map<Integer, L2Territory> _spawnZoneList = new HashMap<>();
+	private final Map<Integer, List<FETSpawn>> _spawnList = new HashMap<>();
 	private final List<Integer> _mustKillMobsId = new FastList<>();
 	
 	// Teleports
@@ -260,7 +259,7 @@ public class FinalEmperialTomb extends Quest
 									continue;
 								}
 								int flag = Integer.parseInt(attrs.getNamedItem("flag").getNodeValue());
-								if (!_spawnList.contains(flag))
+								if (!_spawnList.containsKey(flag))
 									_spawnList.put(flag, new FastList<FETSpawn>());
 								
 								for (Node cd = d.getFirstChild(); cd != null; cd = cd.getNextSibling())
@@ -546,7 +545,7 @@ public class FinalEmperialTomb extends Quest
 					{
 						for (int i = 0; i < spw.count; i++)
 						{
-							if (_spawnZoneList.contains(spw.zone))
+							if (_spawnZoneList.containsKey(spw.zone))
 							{
 								int[] point = _spawnZoneList.get(spw.zone).getRandomPoint();
 								spawn(world, spw.npcId, point[0], point[1], GeoData.getInstance().getSpawnHeight(point[0], point[1], point[2], point[3], null), getRandom(65535), spw.isNeededNextFlag);

+ 5 - 6
L2J_DataPack_BETA/dist/game/data/scripts/instances/SeedOfDestruction/Stage1.java

@@ -14,10 +14,9 @@
  */
 package instances.SeedOfDestruction;
 
-import gnu.trove.map.hash.TIntObjectHashMap;
-
 import java.io.File;
 import java.util.Calendar;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.locks.Lock;
@@ -104,8 +103,8 @@ public class Stage1 extends Quest
 	private static final int MAX_PLAYERS = 45;
 	private static final int MAX_DEVICESPAWNEDMOBCOUNT = 100; // prevent too much mob spawn
 	
-	private TIntObjectHashMap<L2Territory> _spawnZoneList = new TIntObjectHashMap<>();
-	private TIntObjectHashMap<List<SODSpawn>> _spawnList = new TIntObjectHashMap<>();
+	private Map<Integer, L2Territory> _spawnZoneList = new HashMap<>();
+	private Map<Integer, List<SODSpawn>> _spawnList = new HashMap<>();
 	private List<Integer> _mustKillMobsId = new FastList<>();
 
 	// teleports
@@ -203,7 +202,7 @@ public class Stage1 extends Quest
 									continue;
 								}
 								int flag = Integer.parseInt(attrs.getNamedItem("flag").getNodeValue());
-								if (!_spawnList.contains(flag))
+								if (!_spawnList.containsKey(flag))
 									_spawnList.put(flag, new FastList<SODSpawn>());
 								
 								for (Node cd = d.getFirstChild(); cd != null; cd = cd.getNextSibling())
@@ -481,7 +480,7 @@ public class Stage1 extends Quest
 					{
 						for(int i = 0; i < spw.count; i++)
 						{
-							if (_spawnZoneList.contains(spw.zone))
+							if (_spawnZoneList.containsKey(spw.zone))
 							{
 								int[] point = _spawnZoneList.get(spw.zone).getRandomPoint();
 								spawn(world, spw.npcId, point[0], point[1], GeoData.getInstance().getSpawnHeight(point[0], point[1], point[2], point[3],null), getRandom(65535), spw.isNeededNextFlag);

+ 18 - 17
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00508_AClansReputation/Q00508_AClansReputation.java

@@ -14,7 +14,10 @@
  */
 package quests.Q00508_AClansReputation;
 
-import gnu.trove.map.hash.TIntObjectHashMap;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -34,23 +37,20 @@ import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  */
 public class Q00508_AClansReputation extends Quest
 {
-	
 	// NPC
 	private static final int SIR_ERIC_RODEMAI = 30868;
 	
-	private static final TIntObjectHashMap<int[]> REWARD_POINTS = new TIntObjectHashMap<>();
+	private static final Map<Integer, List<Integer>> REWARD_POINTS = new HashMap<>();
 	
-	//@formatter:off
 	static
 	{
-		REWARD_POINTS.put(1, new int[] {25252, 8277, 560 }); // Palibati Queen Themis
-		REWARD_POINTS.put(2, new int[] {25478, 14883, 584 }); // Shilen's Priest Hisilrome
-		REWARD_POINTS.put(3, new int[] {25255, 8280, 602 }); // Gargoyle Lord Tiphon
-		REWARD_POINTS.put(4, new int[] {25245, 8281, 784 }); // Last Lesser Giant Glaki
-		REWARD_POINTS.put(5, new int[] {25051, 8282, 558 }); // Rahha
-		REWARD_POINTS.put(6, new int[] {25524, 8494, 768 }); // Flamestone Giant
+		REWARD_POINTS.put(1, Arrays.asList(25252, 8277, 560)); // Palibati Queen Themis
+		REWARD_POINTS.put(2, Arrays.asList(25478, 14883, 584)); // Shilen's Priest Hisilrome
+		REWARD_POINTS.put(3, Arrays.asList(25255, 8280, 602)); // Gargoyle Lord Tiphon
+		REWARD_POINTS.put(4, Arrays.asList(25245, 8281, 784)); // Last Lesser Giant Glaki
+		REWARD_POINTS.put(5, Arrays.asList(25051, 8282, 558)); // Rahha
+		REWARD_POINTS.put(6, Arrays.asList(25524, 8494, 768)); // Flamestone Giant
 	}
-	//@formatter:on
 	
 	private static final int[] RAID_BOSS =
 	{
@@ -134,13 +134,14 @@ public class Q00508_AClansReputation extends Quest
 				
 				if (REWARD_POINTS.containsKey(raid))
 				{
-					if (st.hasQuestItems(REWARD_POINTS.get(raid)[1]))
+					if (st.hasQuestItems(REWARD_POINTS.get(raid).get(1)))
 					{
 						htmltext = "30868-" + raid + "b.html";
 						st.playSound("ItemSound.quest_fanfare_1");
-						st.takeItems(REWARD_POINTS.get(raid)[1], -1);
-						clan.addReputationScore(REWARD_POINTS.get(raid)[2], true);
-						player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CLAN_QUEST_COMPLETED_AND_S1_POINTS_GAINED).addNumber(REWARD_POINTS.get(raid)[2]));
+						st.takeItems(REWARD_POINTS.get(raid).get(1), -1);
+						final int rep = REWARD_POINTS.get(raid).get(2);
+						clan.addReputationScore(rep, true);
+						player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CLAN_QUEST_COMPLETED_AND_S1_POINTS_GAINED).addNumber(rep));
 						clan.broadcastToOnlineMembers(new PledgeShowInfoUpdate(clan));
 					}
 					else
@@ -186,9 +187,9 @@ public class Q00508_AClansReputation extends Quest
 			int raid = st.getInt("raid");
 			if (REWARD_POINTS.containsKey(raid))
 			{
-				if ((npc.getNpcId() == REWARD_POINTS.get(raid)[0]) && !st.hasQuestItems(REWARD_POINTS.get(raid)[1]))
+				if ((npc.getNpcId() == REWARD_POINTS.get(raid).get(0)) && !st.hasQuestItems(REWARD_POINTS.get(raid).get(1)))
 				{
-					st.rewardItems(REWARD_POINTS.get(raid)[1], 1);
+					st.rewardItems(REWARD_POINTS.get(raid).get(1), 1);
 					st.playSound("ItemSound.quest_itemget");
 				}
 			}

+ 16 - 15
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00509_AClansFame/Q00509_AClansFame.java

@@ -14,7 +14,10 @@
  */
 package quests.Q00509_AClansFame;
 
-import gnu.trove.map.hash.TIntObjectHashMap;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -33,21 +36,18 @@ import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  */
 public class Q00509_AClansFame extends Quest
 {
-	
 	// NPC
 	private static final int VALDIS = 31331;
 	
-	private static final TIntObjectHashMap<int[]> REWARD_POINTS = new TIntObjectHashMap<>();
+	private static final Map<Integer, List<Integer>> REWARD_POINTS = new HashMap<>();
 	
-	//@formatter:off
 	static
 	{
-		REWARD_POINTS.put(1, new int[] {25290, 8489, 1378 }); // Daimon The White-Eyed
-		REWARD_POINTS.put(2, new int[] {25293, 8490, 1378 }); // Hestia, Guardian Deity Of The Hot Springs
-		REWARD_POINTS.put(3, new int[] {25523, 8491, 1070 }); // Plague Golem
-		REWARD_POINTS.put(4, new int[] {25322, 8492, 782 }); // Demon's Agent Falston
+		REWARD_POINTS.put(1, Arrays.asList(25290, 8489, 1378)); // Daimon The White-Eyed
+		REWARD_POINTS.put(2, Arrays.asList(25293, 8490, 1378)); // Hestia, Guardian Deity Of The Hot Springs
+		REWARD_POINTS.put(3, Arrays.asList(25523, 8491, 1070)); // Plague Golem
+		REWARD_POINTS.put(4, Arrays.asList(25322, 8492, 782)); // Demon's Agent Falston
 	}
-	//@formatter:on
 	
 	private static final int[] RAID_BOSS =
 	{
@@ -121,13 +121,14 @@ public class Q00509_AClansFame extends Quest
 				
 				if (REWARD_POINTS.containsKey(raid))
 				{
-					if (st.hasQuestItems(REWARD_POINTS.get(raid)[1]))
+					if (st.hasQuestItems(REWARD_POINTS.get(raid).get(1)))
 					{
 						htmltext = "31331-" + raid + "b.html";
 						st.playSound("ItemSound.quest_fanfare_1");
-						st.takeItems(REWARD_POINTS.get(raid)[1], -1);
-						clan.addReputationScore(REWARD_POINTS.get(raid)[2], true);
-						player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CLAN_QUEST_COMPLETED_AND_S1_POINTS_GAINED).addNumber(REWARD_POINTS.get(raid)[2]));
+						st.takeItems(REWARD_POINTS.get(raid).get(1), -1);
+						final int rep = REWARD_POINTS.get(raid).get(2);
+						clan.addReputationScore(rep, true);
+						player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CLAN_QUEST_COMPLETED_AND_S1_POINTS_GAINED).addNumber(rep));
 						clan.broadcastToOnlineMembers(new PledgeShowInfoUpdate(clan));
 					}
 					else
@@ -173,9 +174,9 @@ public class Q00509_AClansFame extends Quest
 			int raid = st.getInt("raid");
 			if (REWARD_POINTS.containsKey(raid))
 			{
-				if ((npc.getNpcId() == REWARD_POINTS.get(raid)[0]) && !st.hasQuestItems(REWARD_POINTS.get(raid)[1]))
+				if ((npc.getNpcId() == REWARD_POINTS.get(raid).get(0)) && !st.hasQuestItems(REWARD_POINTS.get(raid).get(1)))
 				{
-					st.rewardItems(REWARD_POINTS.get(raid)[1], 1);
+					st.rewardItems(REWARD_POINTS.get(raid).get(1), 1);
 					st.playSound("ItemSound.quest_itemget");
 				}
 			}

+ 4 - 4
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00511_AwlUnderFoot/Q00511_AwlUnderFoot.java

@@ -14,8 +14,8 @@
  */
 package quests.Q00511_AwlUnderFoot;
 
-import gnu.trove.map.hash.TIntObjectHashMap;
-
+import java.util.HashMap;
+import java.util.Map;
 import java.util.logging.Logger;
 
 import com.l2jserver.gameserver.ThreadPoolManager;
@@ -76,7 +76,7 @@ public final class Q00511_AwlUnderFoot extends Quest
 	private static final long REENTERTIME = 14400000;
 	private static final long RAID_SPAWN_DELAY = 120000;
 	
-	private final TIntObjectHashMap<FortDungeon> _fortDungeons = new TIntObjectHashMap<>(21);
+	private final Map<Integer, FortDungeon> _fortDungeons = new HashMap<>(21);
 	
 	// QUEST ITEMS
 	private static final int DL_MARK = 9797;
@@ -471,7 +471,7 @@ public final class Q00511_AwlUnderFoot extends Quest
 		_fortDungeons.put(36326, new FortDungeon(41));
 		_fortDungeons.put(36364, new FortDungeon(42));
 		
-		for (int i : _fortDungeons.keys())
+		for (int i : _fortDungeons.keySet())
 		{
 			addStartNpc(i);
 			addTalkId(i);

+ 52 - 52
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00692_HowtoOpposeEvil/Q00692_HowtoOpposeEvil.java

@@ -14,11 +14,13 @@
  */
 package quests.Q00692_HowtoOpposeEvil;
 
-import gnu.trove.map.hash.TIntObjectHashMap;
+import java.util.HashMap;
+import java.util.Map;
 
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.holders.ItemHolder;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.model.quest.State;
@@ -42,61 +44,59 @@ public final class Q00692_HowtoOpposeEvil extends Quest
 		15536
 	};
 	
-	private static final TIntObjectHashMap<int[]> _questMobs = new TIntObjectHashMap<>();
+	private static final Map<Integer, ItemHolder> _questMobs = new HashMap<>();
 	
-	//@formatter:off
 	static
 	{
 		// Seed of Infinity
-		_questMobs.put(22509, new int[] { 13863, 500 });
-		_questMobs.put(22510, new int[] { 13863, 500 });
-		_questMobs.put(22511, new int[] { 13863, 500 });
-		_questMobs.put(22512, new int[] { 13863, 500 });
-		_questMobs.put(22513, new int[] { 13863, 500 });
-		_questMobs.put(22514, new int[] { 13863, 500 });
-		_questMobs.put(22515, new int[] { 13863, 500 });
+		_questMobs.put(22509, new ItemHolder(13863, 500));
+		_questMobs.put(22510, new ItemHolder(13863, 500));
+		_questMobs.put(22511, new ItemHolder(13863, 500));
+		_questMobs.put(22512, new ItemHolder(13863, 500));
+		_questMobs.put(22513, new ItemHolder(13863, 500));
+		_questMobs.put(22514, new ItemHolder(13863, 500));
+		_questMobs.put(22515, new ItemHolder(13863, 500));
 		// Seed of Destruction
-		_questMobs.put(22537, new int[] { 13865, 250 });
-		_questMobs.put(22538, new int[] { 13865, 250 });
-		_questMobs.put(22539, new int[] { 13865, 250 });
-		_questMobs.put(22540, new int[] { 13865, 250 });
-		_questMobs.put(22541, new int[] { 13865, 250 });
-		_questMobs.put(22542, new int[] { 13865, 250 });
-		_questMobs.put(22543, new int[] { 13865, 250 });
-		_questMobs.put(22544, new int[] { 13865, 250 });
-		_questMobs.put(22546, new int[] { 13865, 250 });
-		_questMobs.put(22547, new int[] { 13865, 250 });
-		_questMobs.put(22548, new int[] { 13865, 250 });
-		_questMobs.put(22549, new int[] { 13865, 250 });
-		_questMobs.put(22550, new int[] { 13865, 250 });
-		_questMobs.put(22551, new int[] { 13865, 250 });
-		_questMobs.put(22552, new int[] { 13865, 250 });
-		_questMobs.put(22593, new int[] { 13865, 250 });
-		_questMobs.put(22596, new int[] { 13865, 250 });
-		_questMobs.put(22597, new int[] { 13865, 250 });
+		_questMobs.put(22537, new ItemHolder(13865, 250));
+		_questMobs.put(22538, new ItemHolder(13865, 250));
+		_questMobs.put(22539, new ItemHolder(13865, 250));
+		_questMobs.put(22540, new ItemHolder(13865, 250));
+		_questMobs.put(22541, new ItemHolder(13865, 250));
+		_questMobs.put(22542, new ItemHolder(13865, 250));
+		_questMobs.put(22543, new ItemHolder(13865, 250));
+		_questMobs.put(22544, new ItemHolder(13865, 250));
+		_questMobs.put(22546, new ItemHolder(13865, 250));
+		_questMobs.put(22547, new ItemHolder(13865, 250));
+		_questMobs.put(22548, new ItemHolder(13865, 250));
+		_questMobs.put(22549, new ItemHolder(13865, 250));
+		_questMobs.put(22550, new ItemHolder(13865, 250));
+		_questMobs.put(22551, new ItemHolder(13865, 250));
+		_questMobs.put(22552, new ItemHolder(13865, 250));
+		_questMobs.put(22593, new ItemHolder(13865, 250));
+		_questMobs.put(22596, new ItemHolder(13865, 250));
+		_questMobs.put(22597, new ItemHolder(13865, 250));
 		// Seed of Annihilation
-		_questMobs.put(22746, new int[] { 15536, 125 });
-		_questMobs.put(22747, new int[] { 15536, 125 });
-		_questMobs.put(22748, new int[] { 15536, 125 });
-		_questMobs.put(22749, new int[] { 15536, 125 });
-		_questMobs.put(22750, new int[] { 15536, 125 });
-		_questMobs.put(22751, new int[] { 15536, 125 });
-		_questMobs.put(22752, new int[] { 15536, 125 });
-		_questMobs.put(22753, new int[] { 15536, 125 });
-		_questMobs.put(22754, new int[] { 15536, 125 });
-		_questMobs.put(22755, new int[] { 15536, 125 });
-		_questMobs.put(22756, new int[] { 15536, 125 });
-		_questMobs.put(22757, new int[] { 15536, 125 });
-		_questMobs.put(22758, new int[] { 15536, 125 });
-		_questMobs.put(22759, new int[] { 15536, 125 });
-		_questMobs.put(22760, new int[] { 15536, 125 });
-		_questMobs.put(22761, new int[] { 15536, 125 });
-		_questMobs.put(22762, new int[] { 15536, 125 });
-		_questMobs.put(22763, new int[] { 15536, 125 });
-		_questMobs.put(22764, new int[] { 15536, 125 });
-		_questMobs.put(22765, new int[] { 15536, 125 });
+		_questMobs.put(22746, new ItemHolder(15536, 125));
+		_questMobs.put(22747, new ItemHolder(15536, 125));
+		_questMobs.put(22748, new ItemHolder(15536, 125));
+		_questMobs.put(22749, new ItemHolder(15536, 125));
+		_questMobs.put(22750, new ItemHolder(15536, 125));
+		_questMobs.put(22751, new ItemHolder(15536, 125));
+		_questMobs.put(22752, new ItemHolder(15536, 125));
+		_questMobs.put(22753, new ItemHolder(15536, 125));
+		_questMobs.put(22754, new ItemHolder(15536, 125));
+		_questMobs.put(22755, new ItemHolder(15536, 125));
+		_questMobs.put(22756, new ItemHolder(15536, 125));
+		_questMobs.put(22757, new ItemHolder(15536, 125));
+		_questMobs.put(22758, new ItemHolder(15536, 125));
+		_questMobs.put(22759, new ItemHolder(15536, 125));
+		_questMobs.put(22760, new ItemHolder(15536, 125));
+		_questMobs.put(22761, new ItemHolder(15536, 125));
+		_questMobs.put(22762, new ItemHolder(15536, 125));
+		_questMobs.put(22763, new ItemHolder(15536, 125));
+		_questMobs.put(22764, new ItemHolder(15536, 125));
+		_questMobs.put(22765, new ItemHolder(15536, 125));
 	}
-	//@formatter:on
 	
 	private static final boolean giveReward(QuestState st, int itemId, int minCount, int rewardItemId, long rewardCount)
 	{
@@ -239,7 +239,7 @@ public final class Q00692_HowtoOpposeEvil extends Quest
 		final int npcId = npc.getNpcId();
 		if ((st != null) && _questMobs.containsKey(npcId))
 		{
-			int chance = (int) (_questMobs.get(npcId)[1] * Config.RATE_QUEST_DROP);
+			int chance = (int) (_questMobs.get(npcId).getCount() * Config.RATE_QUEST_DROP);
 			int numItems = chance / 1000;
 			chance = chance % 1000;
 			if (getRandom(1000) < chance)
@@ -248,7 +248,7 @@ public final class Q00692_HowtoOpposeEvil extends Quest
 			}
 			if (numItems > 0)
 			{
-				st.giveItems(_questMobs.get(npcId)[0], numItems);
+				st.giveItems(_questMobs.get(npcId).getId(), numItems);
 				st.playSound("ItemSound.quest_itemget");
 			}
 		}
@@ -261,7 +261,7 @@ public final class Q00692_HowtoOpposeEvil extends Quest
 		addStartNpc(DILIOS);
 		addTalkId(DILIOS);
 		addTalkId(32550);
-		addKillId(_questMobs.keys());
+		addKillId(_questMobs.keySet());
 	}
 	
 	public static void main(String[] args)

部分文件因为文件数量过多而无法显示