|
@@ -18,9 +18,8 @@
|
|
*/
|
|
*/
|
|
package custom.events.Race;
|
|
package custom.events.Race;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
|
-import java.util.List;
|
|
|
|
-import java.util.concurrent.CopyOnWriteArrayList;
|
|
|
|
|
|
+import java.util.Set;
|
|
|
|
+import java.util.concurrent.ConcurrentHashMap;
|
|
import java.util.concurrent.ScheduledFuture;
|
|
import java.util.concurrent.ScheduledFuture;
|
|
|
|
|
|
import com.l2jserver.Config;
|
|
import com.l2jserver.Config;
|
|
@@ -42,11 +41,11 @@ import com.l2jserver.gameserver.util.Broadcast;
|
|
public final class Race extends Event
|
|
public final class Race extends Event
|
|
{
|
|
{
|
|
// Event NPC's list
|
|
// Event NPC's list
|
|
- private List<L2Npc> _npclist;
|
|
|
|
|
|
+ private final Set<L2Npc> _npcs = ConcurrentHashMap.newKeySet();
|
|
// Npc
|
|
// Npc
|
|
private L2Npc _npc;
|
|
private L2Npc _npc;
|
|
// Player list
|
|
// Player list
|
|
- private List<L2PcInstance> _players;
|
|
|
|
|
|
+ private final Set<L2PcInstance> _players = ConcurrentHashMap.newKeySet();
|
|
// Event Task
|
|
// Event Task
|
|
ScheduledFuture<?> _eventTask = null;
|
|
ScheduledFuture<?> _eventTask = null;
|
|
// Event state
|
|
// Event state
|
|
@@ -120,6 +119,7 @@ public final class Race extends Event
|
|
{
|
|
{
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
+
|
|
// Check Custom Table - we use custom NPC's
|
|
// Check Custom Table - we use custom NPC's
|
|
if (!Config.CUSTOM_NPC_DATA)
|
|
if (!Config.CUSTOM_NPC_DATA)
|
|
{
|
|
{
|
|
@@ -127,9 +127,7 @@ public final class Race extends Event
|
|
eventMaker.sendMessage("Event " + getName() + " can't be started because custom NPC table is disabled!");
|
|
eventMaker.sendMessage("Event " + getName() + " can't be started because custom NPC table is disabled!");
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
- // Initialize list
|
|
|
|
- _npclist = new ArrayList<>();
|
|
|
|
- _players = new CopyOnWriteArrayList<>();
|
|
|
|
|
|
+
|
|
// Set Event active
|
|
// Set Event active
|
|
_isactive = true;
|
|
_isactive = true;
|
|
// Spawn Manager
|
|
// Spawn Manager
|
|
@@ -167,7 +165,7 @@ public final class Race extends Event
|
|
// Transform players and send message
|
|
// Transform players and send message
|
|
for (L2PcInstance player : _players)
|
|
for (L2PcInstance player : _players)
|
|
{
|
|
{
|
|
- if ((player != null) && player.isOnline())
|
|
|
|
|
|
+ if (player.isOnline())
|
|
{
|
|
{
|
|
if (player.isInsideRadius(_npc, 500, false, false))
|
|
if (player.isInsideRadius(_npc, 500, false, false))
|
|
{
|
|
{
|
|
@@ -209,22 +207,19 @@ public final class Race extends Event
|
|
// Teleport to event start point
|
|
// Teleport to event start point
|
|
for (L2PcInstance player : _players)
|
|
for (L2PcInstance player : _players)
|
|
{
|
|
{
|
|
- if ((player != null) && player.isOnline())
|
|
|
|
|
|
+ if (player.isOnline())
|
|
{
|
|
{
|
|
player.untransform();
|
|
player.untransform();
|
|
player.teleToLocation(_npc.getX(), _npc.getY(), _npc.getZ(), true);
|
|
player.teleToLocation(_npc.getX(), _npc.getY(), _npc.getZ(), true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ _players.clear();
|
|
// Despawn NPCs
|
|
// Despawn NPCs
|
|
- for (L2Npc _npc : _npclist)
|
|
|
|
|
|
+ for (L2Npc _npc : _npcs)
|
|
{
|
|
{
|
|
- if (_npc != null)
|
|
|
|
- {
|
|
|
|
- _npc.deleteMe();
|
|
|
|
- }
|
|
|
|
|
|
+ _npc.deleteMe();
|
|
}
|
|
}
|
|
- _npclist.clear();
|
|
|
|
- _players.clear();
|
|
|
|
|
|
+ _npcs.clear();
|
|
// Announce event end
|
|
// Announce event end
|
|
Broadcast.toAllOnlinePlayers("* Race Event finished *");
|
|
Broadcast.toAllOnlinePlayers("* Race Event finished *");
|
|
|
|
|
|
@@ -355,10 +350,7 @@ public final class Race extends Event
|
|
private L2Npc recordSpawn(int npcId, int x, int y, int z, int heading, boolean randomOffSet, long despawnDelay)
|
|
private L2Npc recordSpawn(int npcId, int x, int y, int z, int heading, boolean randomOffSet, long despawnDelay)
|
|
{
|
|
{
|
|
final L2Npc npc = addSpawn(npcId, x, y, z, heading, randomOffSet, despawnDelay);
|
|
final L2Npc npc = addSpawn(npcId, x, y, z, heading, randomOffSet, despawnDelay);
|
|
- if (npc != null)
|
|
|
|
- {
|
|
|
|
- _npclist.add(npc);
|
|
|
|
- }
|
|
|
|
|
|
+ _npcs.add(npc);
|
|
return npc;
|
|
return npc;
|
|
}
|
|
}
|
|
|
|
|