Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Index: java/com/l2jserver/gameserver/LoginServerThread.java
- ===================================================================
- --- java/com/l2jserver/gameserver/LoginServerThread.java (revision 4790)
- +++ java/com/l2jserver/gameserver/LoginServerThread.java (working copy)
- @@ -32,7 +32,6 @@
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.util.ArrayList;
- -import java.util.Collection;
- import java.util.List;
- import java.util.Map;
- import java.util.logging.Level;
- @@ -292,10 +291,9 @@
- if (L2World.getInstance().getAllPlayersCount() > 0)
- {
- FastList<String> playerList = new FastList<String>();
- - Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers().values();
- //synchronized (L2World.getInstance().getAllPlayers())
- {
- - for (L2PcInstance player : pls)
- + for (L2PcInstance player : L2World.getInstance().getAllPlayersArray())
- playerList.add(player.getAccountName());
- }
- PlayerInGame pig = new PlayerInGame(playerList);
- Index: java/com/l2jserver/gameserver/SevenSigns.java
- ===================================================================
- --- java/com/l2jserver/gameserver/SevenSigns.java (revision 4790)
- +++ java/com/l2jserver/gameserver/SevenSigns.java (working copy)
- @@ -14,12 +14,13 @@
- */
- package com.l2jserver.gameserver;
- +import gnu.trove.TObjectProcedure;
- +
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.util.Calendar;
- -import java.util.Collection;
- import java.util.List;
- import java.util.Map;
- import java.util.logging.Level;
- @@ -1383,20 +1384,28 @@
- */
- protected void teleLosingCabalFromDungeons(String compWinner)
- {
- - Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers().values();
- - //synchronized (L2World.getInstance().getAllPlayers())
- + L2World.getInstance().forEachPlayer(new teleLosingCabalFromDungeons(compWinner));
- + }
- +
- + private final class teleLosingCabalFromDungeons implements TObjectProcedure<L2PcInstance>
- + {
- + private final String _cmpWinner;
- +
- + private teleLosingCabalFromDungeons(final String compWinner)
- + {
- + _cmpWinner = compWinner;
- + }
- +
- + @Override
- + public final boolean execute(final L2PcInstance onlinePlayer)
- {
- - StatsSet currPlayer;
- - for (L2PcInstance onlinePlayer : pls)
- + if (onlinePlayer != null)
- {
- - if (onlinePlayer == null)
- - continue;
- -
- - currPlayer = _signsPlayerData.get(onlinePlayer.getObjectId());
- + StatsSet currPlayer = _signsPlayerData.get(onlinePlayer.getObjectId());
- if (isSealValidationPeriod() || isCompResultsPeriod())
- {
- - if (!onlinePlayer.isGM() && onlinePlayer.isIn7sDungeon() && (currPlayer == null || !currPlayer.getString("cabal").equals(compWinner)))
- + if (!onlinePlayer.isGM() && onlinePlayer.isIn7sDungeon() && (currPlayer == null || !currPlayer.getString("cabal").equals(_cmpWinner)))
- {
- onlinePlayer.teleToLocation(MapRegionManager.TeleportWhereType.Town);
- onlinePlayer.setIsIn7sDungeon(false);
- @@ -1413,6 +1422,8 @@
- }
- }
- }
- +
- + return true;
- }
- }
- @@ -1574,33 +1585,53 @@
- public void giveCPMult(int StrifeOwner)
- {
- - int cabal;
- - //Gives "Victor of War" passive skill to all online characters with Cabal, which controls Seal of Strife
- - for (L2PcInstance character : L2World.getInstance().getAllPlayers().values())
- + L2World.getInstance().forEachPlayer(new giveCPMult(StrifeOwner));
- + }
- +
- + private final class giveCPMult implements TObjectProcedure<L2PcInstance>
- + {
- + private final int _strifeOwner;
- +
- + private giveCPMult(int strifeOwner)
- + {
- + _strifeOwner = strifeOwner;
- + }
- + @Override
- + public final boolean execute(final L2PcInstance character)
- {
- - if (character == null)
- - continue;
- + if (character != null)
- + {
- + //Gives "Victor of War" passive skill to all online characters with Cabal, which controls Seal of Strife
- + int cabal = getPlayerCabal(character.getObjectId());
- + if (cabal != SevenSigns.CABAL_NULL)
- + if (cabal == _strifeOwner)
- + character.addSkill(SkillTable.FrequentSkill.THE_VICTOR_OF_WAR.getSkill());
- + else
- + //Gives "The Vanquished of War" passive skill to all online characters with Cabal, which does not control Seal of Strife
- + character.addSkill(SkillTable.FrequentSkill.THE_VANQUISHED_OF_WAR.getSkill());
- + }
- - cabal = getPlayerCabal(character.getObjectId());
- - if (cabal != SevenSigns.CABAL_NULL)
- - if (cabal == StrifeOwner)
- - character.addSkill(SkillTable.FrequentSkill.THE_VICTOR_OF_WAR.getSkill());
- - else
- - //Gives "The Vanquished of War" passive skill to all online characters with Cabal, which does not control Seal of Strife
- - character.addSkill(SkillTable.FrequentSkill.THE_VANQUISHED_OF_WAR.getSkill());
- + return true;
- }
- }
- public void removeCPMult()
- {
- - for (L2PcInstance character : L2World.getInstance().getAllPlayers().values())
- + L2World.getInstance().forEachPlayer(new removeCPMult());
- + }
- +
- + private final class removeCPMult implements TObjectProcedure<L2PcInstance>
- + {
- + @Override
- + public final boolean execute(final L2PcInstance character)
- {
- - if (character == null)
- - continue;
- -
- - //Remove SevenSigns' buffs/debuffs.
- - character.removeSkill(SkillTable.FrequentSkill.THE_VICTOR_OF_WAR.getSkill());
- - character.removeSkill(SkillTable.FrequentSkill.THE_VANQUISHED_OF_WAR.getSkill());
- + if (character != null)
- + {
- + //Remove SevenSigns' buffs/debuffs.
- + character.removeSkill(SkillTable.FrequentSkill.THE_VICTOR_OF_WAR.getSkill());
- + character.removeSkill(SkillTable.FrequentSkill.THE_VANQUISHED_OF_WAR.getSkill());
- + }
- + return true;
- }
- }
- Index: java/com/l2jserver/gameserver/SevenSignsFestival.java
- ===================================================================
- --- java/com/l2jserver/gameserver/SevenSignsFestival.java (revision 4790)
- +++ java/com/l2jserver/gameserver/SevenSignsFestival.java (working copy)
- @@ -14,12 +14,13 @@
- */
- package com.l2jserver.gameserver;
- +import gnu.trove.TObjectProcedure;
- +
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.util.ArrayList;
- -import java.util.Collection;
- import java.util.List;
- import java.util.Map;
- import java.util.concurrent.ScheduledFuture;
- @@ -1251,23 +1252,7 @@
- saveFestivalData(updateSettings);
- // Remove any unused blood offerings from online players.
- - Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers().values();
- - //synchronized (L2World.getInstance().getAllPlayers())
- - {
- - for (L2PcInstance onlinePlayer : pls)
- - {
- - try
- - {
- - L2ItemInstance bloodOfferings = onlinePlayer.getInventory().getItemByItemId(FESTIVAL_OFFERING_ID);
- -
- - if (bloodOfferings != null)
- - onlinePlayer.destroyItem("SevenSigns", bloodOfferings, null, false);
- - }
- - catch (NullPointerException e)
- - {
- - }
- - }
- - }
- + L2World.getInstance().forEachPlayer(new ForEachPlayerRemoveUnusedBloodOfferings());
- _log.info("SevenSignsFestival: Reinitialized engine for next competition period.");
- }
- @@ -2450,6 +2435,25 @@
- }
- }
- + private final class ForEachPlayerRemoveUnusedBloodOfferings implements TObjectProcedure<L2PcInstance>
- + {
- + @Override
- + public final boolean execute(final L2PcInstance onlinePlayer)
- + {
- + try
- + {
- + L2ItemInstance bloodOfferings = onlinePlayer.getInventory().getItemByItemId(FESTIVAL_OFFERING_ID);
- +
- + if (bloodOfferings != null)
- + onlinePlayer.destroyItem("SevenSigns", bloodOfferings, null, false);
- + }
- + catch (NullPointerException e)
- + {
- + }
- + return true;
- + }
- + }
- +
- @SuppressWarnings("synthetic-access")
- private static class SingletonHolder
- {
- Index: java/com/l2jserver/gameserver/Shutdown.java
- ===================================================================
- --- java/com/l2jserver/gameserver/Shutdown.java (revision 4790)
- +++ java/com/l2jserver/gameserver/Shutdown.java (working copy)
- @@ -14,7 +14,8 @@
- */
- package com.l2jserver.gameserver;
- -import java.util.Collection;
- +import gnu.trove.TObjectProcedure;
- +
- import java.util.logging.Level;
- import java.util.logging.Logger;
- @@ -576,13 +577,16 @@
- */
- private void disconnectAllCharacters()
- {
- - Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers().values();
- - //synchronized (L2World.getInstance().getAllPlayers())
- + L2World.getInstance().forEachPlayer(new disconnectAllCharacters());
- + }
- +
- + private final class disconnectAllCharacters implements TObjectProcedure<L2PcInstance>
- + {
- + @Override
- + public final boolean execute(final L2PcInstance player)
- {
- - for (L2PcInstance player : pls)
- + if (player != null)
- {
- - if (player == null)
- - continue;
- //Logout Character
- try
- {
- @@ -597,9 +601,10 @@
- }
- catch (Throwable t)
- {
- - _log.log(Level.WARNING, "Failed logour char "+player, t);
- + _log.log(Level.WARNING, "Failed logour char " + player, t);
- }
- }
- + return true;
- }
- }
- Index: java/com/l2jserver/gameserver/communitybbs/Manager/RegionBBSManager.java
- ===================================================================
- --- java/com/l2jserver/gameserver/communitybbs/Manager/RegionBBSManager.java (revision 4790)
- +++ java/com/l2jserver/gameserver/communitybbs/Manager/RegionBBSManager.java (working copy)
- @@ -272,12 +272,11 @@
- return SingletonHolder._instance;
- }
- - public /*synchronized */ void changeCommunityBoard()
- + public/*synchronized */void changeCommunityBoard()
- {
- FastList<L2PcInstance> sortedPlayers = new FastList<L2PcInstance>();
- - sortedPlayers.addAll(L2World.getInstance().getAllPlayers().values());
- -
- - Collections.sort(sortedPlayers, new Comparator<L2PcInstance>()
- + Collections.addAll(sortedPlayers, L2World.getInstance().getAllPlayersArray());
- + Collections.sort(sortedPlayers, new Comparator<L2PcInstance>()
- {
- @Override
- public int compare(L2PcInstance p1, L2PcInstance p2)
- @@ -298,7 +297,7 @@
- _communityPages.clear();
- writeCommunityPages();
- }
- -
- +
- private void addOnlinePlayer(L2PcInstance player)
- {
- boolean added = false;
- Index: java/com/l2jserver/gameserver/datatables/OfflineTradersTable.java
- ===================================================================
- --- java/com/l2jserver/gameserver/datatables/OfflineTradersTable.java (revision 4790)
- +++ java/com/l2jserver/gameserver/datatables/OfflineTradersTable.java (working copy)
- @@ -62,7 +62,7 @@
- PreparedStatement stm_items = con.prepareStatement(SAVE_ITEMS);
- //TextBuilder items = TextBuilder.newInstance();
- - for (L2PcInstance pc : L2World.getInstance().getAllPlayers().values())
- + for (L2PcInstance pc : L2World.getInstance().getAllPlayersArray())
- {
- try
- {
- Index: java/com/l2jserver/gameserver/instancemanager/BoatManager.java
- ===================================================================
- --- java/com/l2jserver/gameserver/instancemanager/BoatManager.java (revision 4790)
- +++ java/com/l2jserver/gameserver/instancemanager/BoatManager.java (working copy)
- @@ -14,7 +14,8 @@
- */
- package com.l2jserver.gameserver.instancemanager;
- -import java.util.Collection;
- +import gnu.trove.TObjectProcedure;
- +
- import java.util.Map;
- import javolution.util.FastMap;
- @@ -152,25 +153,8 @@
- */
- public void broadcastPacket(VehiclePathPoint point1, VehiclePathPoint point2, L2GameServerPacket packet)
- {
- - double dx, dy;
- - final Collection<L2PcInstance> players = L2World.getInstance().getAllPlayers().values();
- - for (L2PcInstance player : players)
- - {
- - if (player == null)
- - continue;
- -
- - dx = (double)player.getX() - point1.x;
- - dy = (double)player.getY() - point1.y;
- - if (Math.sqrt(dx*dx + dy*dy) < Config.BOAT_BROADCAST_RADIUS)
- - player.sendPacket(packet);
- - else
- - {
- - dx = (double)player.getX() - point2.x;
- - dy = (double)player.getY() - point2.y;
- - if (Math.sqrt(dx*dx + dy*dy) < Config.BOAT_BROADCAST_RADIUS)
- - player.sendPacket(packet);
- - }
- - }
- +
- + L2World.getInstance().forEachPlayer(new ForEachPlayerBroadcastPackets(point1, point2, packet));
- }
- /**
- @@ -178,27 +162,46 @@
- */
- public void broadcastPackets(VehiclePathPoint point1, VehiclePathPoint point2, L2GameServerPacket... packets)
- {
- - double dx, dy;
- - final Collection<L2PcInstance> players = L2World.getInstance().getAllPlayers().values();
- - for (L2PcInstance player : players)
- + L2World.getInstance().forEachPlayer(new ForEachPlayerBroadcastPackets(point1, point2, packets));
- + }
- +
- + private final class ForEachPlayerBroadcastPackets implements TObjectProcedure<L2PcInstance>
- + {
- + VehiclePathPoint _point1, _point2;
- + L2GameServerPacket[] _packets;
- +
- + private ForEachPlayerBroadcastPackets(VehiclePathPoint point1, VehiclePathPoint point2, L2GameServerPacket ... packets)
- {
- - if (player == null)
- - continue;
- - dx = (double)player.getX() - point1.x;
- - dy = (double)player.getY() - point1.y;
- - if (Math.sqrt(dx*dx + dy*dy) < Config.BOAT_BROADCAST_RADIUS)
- - {
- - for (L2GameServerPacket p : packets)
- - player.sendPacket(p);
- - }
- - else
- + _point1 = point1;
- + _point2 = point2;
- + _packets = packets;
- + }
- +
- + @Override
- + public final boolean execute(final L2PcInstance player)
- + {
- + if (player != null)
- {
- - dx = (double)player.getX() - point2.x;
- - dy = (double)player.getY() - point2.y;
- - if (Math.sqrt(dx*dx + dy*dy) < Config.BOAT_BROADCAST_RADIUS)
- - for (L2GameServerPacket p : packets)
- + double dx = (double) player.getX() - _point1.x;
- + double dy = (double) player.getY() - _point1.y;
- + if (Math.sqrt(dx * dx + dy * dy) < Config.BOAT_BROADCAST_RADIUS)
- + {
- + for (L2GameServerPacket p : _packets)
- player.sendPacket(p);
- + }
- + else
- + {
- + dx = (double) player.getX() - _point2.x;
- + dy = (double) player.getY() - _point2.y;
- + if (Math.sqrt(dx * dx + dy * dy) < Config.BOAT_BROADCAST_RADIUS)
- + {
- + for (L2GameServerPacket p : _packets)
- + player.sendPacket(p);
- + }
- + }
- }
- +
- + return true;
- }
- }
- Index: java/com/l2jserver/gameserver/instancemanager/TerritoryWarManager.java
- ===================================================================
- --- java/com/l2jserver/gameserver/instancemanager/TerritoryWarManager.java (revision 4790)
- +++ java/com/l2jserver/gameserver/instancemanager/TerritoryWarManager.java (working copy)
- @@ -1118,7 +1118,7 @@
- {
- if (isTWInProgress())
- {
- - for(L2PcInstance player : L2World.getInstance().getAllPlayers().values())
- + for(L2PcInstance player : L2World.getInstance().getAllPlayersArray())
- if (player != null && player.getSiegeSide() > 0)
- giveTWPoint(player, 1000, 6);
- }
- Index: java/com/l2jserver/gameserver/instancemanager/ZoneManager.java
- ===================================================================
- --- java/com/l2jserver/gameserver/instancemanager/ZoneManager.java (revision 4790)
- +++ java/com/l2jserver/gameserver/instancemanager/ZoneManager.java (working copy)
- @@ -15,6 +15,8 @@
- package com.l2jserver.gameserver.instancemanager;
- +import gnu.trove.TObjectProcedure;
- +
- import java.io.File;
- import java.lang.reflect.Constructor;
- import java.util.Collection;
- @@ -97,11 +99,18 @@
- _log.info("Removed zones in " + count + " regions.");
- // Load the zones
- load();
- -
- - for (L2Object o : L2World.getInstance().getAllVisibleObjects().values())
- - {
- + L2World.getInstance().forEachObject(new ForEachCharacterRevalidateZone());
- +
- + }
- +
- + private final class ForEachCharacterRevalidateZone implements TObjectProcedure<L2Object>
- + {
- + @Override
- + public final boolean execute(final L2Object o)
- + {
- if (o instanceof L2Character)
- ((L2Character) o).revalidateZone(true);
- + return true;
- }
- }
- Index: java/com/l2jserver/gameserver/model/L2World.java
- ===================================================================
- --- java/com/l2jserver/gameserver/model/L2World.java (revision 4790)
- +++ java/com/l2jserver/gameserver/model/L2World.java (working copy)
- @@ -14,14 +14,18 @@
- */
- package com.l2jserver.gameserver.model;
- +import gnu.trove.TIntObjectHashMap;
- +import gnu.trove.TObjectProcedure;
- +
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.List;
- import java.util.Map;
- +import java.util.concurrent.locks.Lock;
- +import java.util.concurrent.locks.ReentrantReadWriteLock;
- import java.util.logging.Logger;
- import javolution.util.FastList;
- -import javolution.util.FastMap;
- import com.l2jserver.Config;
- import com.l2jserver.gameserver.GmListTable;
- @@ -75,13 +79,19 @@
- //private FastMap<String, L2PcInstance> _allGms;
- /** HashMap(Integer Player id, L2PcInstance) containing all the players in game */
- - private Map<Integer, L2PcInstance> _allPlayers;
- + private TIntObjectHashMap<L2PcInstance> _allPlayers;
- + private final Lock _apRL;
- + private final Lock _apWL;
- /** L2ObjectHashMap(L2Object) containing all visible objects */
- - private Map<Integer, L2Object> _allObjects;
- + private TIntObjectHashMap<L2Object> _allObjects;
- + private final Lock _aoRL;
- + private final Lock _aoWL;
- /** List with the pets instances and their owner id */
- - private Map<Integer, L2PetInstance> _petsInstance;
- + private TIntObjectHashMap<L2PetInstance> _petsInstance;
- + private final Lock _piRL;
- + private final Lock _piWL;
- private L2WorldRegion[][] _worldRegions;
- @@ -90,10 +100,20 @@
- */
- private L2World()
- {
- - //_allGms = new FastMap<String, L2PcInstance>();
- - _allPlayers = new FastMap<Integer, L2PcInstance>().shared();
- - _petsInstance = new FastMap<Integer, L2PetInstance>().shared();
- - _allObjects = new FastMap<Integer, L2Object>().shared();
- + ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
- + _apRL = lock.readLock();
- + _apWL = lock.writeLock();
- + _allPlayers = new TIntObjectHashMap<L2PcInstance>();
- +
- + lock = new ReentrantReadWriteLock();
- + _aoRL = lock.readLock();
- + _aoWL = lock.writeLock();
- + _allObjects = new TIntObjectHashMap<L2Object>();
- +
- + lock = new ReentrantReadWriteLock();
- + _piRL = lock.readLock();
- + _piWL = lock.writeLock();
- + _petsInstance = new TIntObjectHashMap<L2PetInstance>();
- initRegions();
- }
- @@ -115,24 +135,52 @@
- */
- public void storeObject(L2Object object)
- {
- - assert !_allObjects.containsKey(object.getObjectId());
- -
- - if (_allObjects.containsKey(object.getObjectId()))
- + _aoWL.lock();
- + try
- {
- - _log.warning("[L2World] object: " + object + " already exist in OID map!");
- - _log.info(StringUtil.getTraceString(Thread.currentThread().getStackTrace()));
- - return;
- + _aoRL.lock();
- + try
- + {
- + assert !_allObjects.containsKey(object.getObjectId());
- +
- + if (_allObjects.containsKey(object.getObjectId()))
- + {
- + if (Config.DEBUG)
- + {
- + _log.warning("[L2World] object: " + object + " already exist in OID map!");
- + _log.info(StringUtil.getTraceString(Thread.currentThread().getStackTrace()));
- + return;
- + }
- + }
- + }
- + finally
- + {
- + _aoRL.unlock();
- + }
- +
- + _allObjects.put(object.getObjectId(), object);
- }
- -
- - _allObjects.put(object.getObjectId(), object);
- + finally
- + {
- + _aoWL.unlock();
- + }
- }
- public long timeStoreObject(L2Object object)
- {
- - long time = System.nanoTime();
- - _allObjects.put(object.getObjectId(), object);
- - time = System.nanoTime() - time;
- - return time;
- + _aoWL.lock();
- +
- + try
- + {
- + long time = System.nanoTime();
- + _allObjects.put(object.getObjectId(), object);
- + time = System.nanoTime() - time;
- + return time;
- + }
- + finally
- + {
- + _aoWL.unlock();
- + }
- }
- /**
- @@ -148,33 +196,69 @@
- */
- public void removeObject(L2Object object)
- {
- - _allObjects.remove(Integer.valueOf(object.getObjectId())); // suggestion by whatev
- - //IdFactory.getInstance().releaseId(object.getObjectId());
- + _aoWL.lock();
- +
- + try
- + {
- + _allObjects.remove(object.getObjectId()); // suggestion by whatev
- + //IdFactory.getInstance().releaseId(object.getObjectId());
- + }
- + finally
- + {
- + _aoWL.unlock();
- + }
- }
- public void removeObjects(List<L2Object> list)
- {
- - for (L2Object o : list)
- + _aoWL.lock();
- +
- + try
- + {
- + for (L2Object o : list)
- + {
- + if (o != null)
- + _allObjects.remove(o.getObjectId()); // suggestion by whatev
- + }
- + //IdFactory.getInstance().releaseId(object.getObjectId());
- + }
- + finally
- {
- - if (o != null)
- - _allObjects.remove(Integer.valueOf(o.getObjectId())); // suggestion by whatev
- + _aoWL.unlock();
- }
- - //IdFactory.getInstance().releaseId(object.getObjectId());
- }
- public void removeObjects(L2Object[] objects)
- {
- - for (L2Object o : objects)
- - _allObjects.remove(Integer.valueOf(o.getObjectId())); // suggestion by whatev
- - //IdFactory.getInstance().releaseId(object.getObjectId());
- + _aoWL.lock();
- +
- + try
- + {
- + for (L2Object o : objects)
- + _allObjects.remove(o.getObjectId()); // suggestion by whatev
- + //IdFactory.getInstance().releaseId(object.getObjectId());
- + }
- + finally
- + {
- + _aoWL.unlock();
- + }
- }
- public long timeRemoveObject(L2Object object)
- {
- - long time = System.nanoTime();
- - _allObjects.remove(Integer.valueOf(object.getObjectId()));
- - time = System.nanoTime() - time;
- - return time;
- + _aoWL.lock();
- +
- + try
- + {
- + long time = System.nanoTime();
- + _allObjects.remove(object.getObjectId());
- + time = System.nanoTime() - time;
- + return time;
- + }
- + finally
- + {
- + _aoWL.unlock();
- + }
- }
- /**
- @@ -187,15 +271,33 @@
- */
- public L2Object findObject(int oID)
- {
- - return _allObjects.get(Integer.valueOf(oID));
- + _aoRL.lock();
- +
- + try
- + {
- + return _allObjects.get(oID);
- + }
- + finally
- + {
- + _aoRL.unlock();
- + }
- }
- public long timeFindObject(int objectID)
- {
- - long time = System.nanoTime();
- - _allObjects.get(Integer.valueOf(objectID));
- - time = System.nanoTime() - time;
- - return time;
- + _aoRL.lock();
- +
- + try
- + {
- + long time = System.nanoTime();
- + _allObjects.get(objectID);
- + time = System.nanoTime() - time;
- + return time;
- + }
- + finally
- + {
- + _aoRL.unlock();
- + }
- }
- /**
- @@ -207,9 +309,46 @@
- * @deprecated
- */
- @Deprecated
- - public final Map<Integer, L2Object> getAllVisibleObjects()
- + public final TIntObjectHashMap<L2Object> getAllVisibleObjects()
- + {
- + _aoRL.lock();
- +
- + try
- + {
- + return _allObjects;
- + }
- + finally
- + {
- + _aoRL.unlock();
- + }
- + }
- +
- + public final L2Object[] getAllVisibleObjectsArray()
- {
- - return _allObjects;
- + _aoRL.lock();
- +
- + try
- + {
- + return _allObjects.getValues(new L2Object[_allObjects.size()]);
- + }
- + finally
- + {
- + _aoRL.unlock();
- + }
- + }
- +
- + public final boolean forEachObject(final TObjectProcedure<L2Object> proc)
- + {
- + _aoRL.lock();
- +
- + try
- + {
- + return _allObjects.forEachValue(proc);
- + }
- + finally
- + {
- + _aoRL.unlock();
- + }
- }
- /**
- @@ -231,9 +370,46 @@
- return GmListTable.getInstance().getAllGms(true);
- }
- - public Map<Integer, L2PcInstance> getAllPlayers()
- + public TIntObjectHashMap<L2PcInstance> getAllPlayers()
- {
- - return _allPlayers;
- + _apRL.lock();
- +
- + try
- + {
- + return _allPlayers;
- + }
- + finally
- + {
- + _apRL.unlock();
- + }
- + }
- +
- + public final L2PcInstance[] getAllPlayersArray()
- + {
- + _apRL.lock();
- +
- + try
- + {
- + return _allPlayers.getValues(new L2PcInstance[_allPlayers.size()]);
- + }
- + finally
- + {
- + _apRL.unlock();
- + }
- + }
- +
- + public final boolean forEachPlayer(final TObjectProcedure<L2PcInstance> proc)
- + {
- + _apRL.lock();
- +
- + try
- + {
- + return _allPlayers.forEachValue(proc);
- + }
- + finally
- + {
- + _apRL.unlock();
- + }
- }
- /**
- @@ -264,7 +440,16 @@
- */
- public L2PcInstance getPlayer(int playerObjId)
- {
- - return _allPlayers.get(Integer.valueOf(playerObjId));
- + _apRL.lock();
- +
- + try
- + {
- + return _allPlayers.get(playerObjId);
- + }
- + finally
- + {
- + _apRL.unlock();
- + }
- }
- /**
- @@ -274,7 +459,16 @@
- */
- public L2PetInstance getPet(int ownerId)
- {
- - return _petsInstance.get(Integer.valueOf(ownerId));
- + _piRL.lock();
- +
- + try
- + {
- + return _petsInstance.get(ownerId);
- + }
- + finally
- + {
- + _piRL.unlock();
- + }
- }
- /**
- @@ -285,7 +479,16 @@
- */
- public L2PetInstance addPet(int ownerId, L2PetInstance pet)
- {
- - return _petsInstance.put(ownerId, pet);
- + _piWL.lock();
- +
- + try
- + {
- + return _petsInstance.put(ownerId, pet);
- + }
- + finally
- + {
- + _piWL.unlock();
- + }
- }
- /**
- @@ -295,7 +498,16 @@
- */
- public void removePet(int ownerId)
- {
- - _petsInstance.remove(Integer.valueOf(ownerId));
- + _piWL.lock();
- +
- + try
- + {
- + _petsInstance.remove(ownerId);
- + }
- + finally
- + {
- + _piWL.unlock();
- + }
- }
- /**
- @@ -305,7 +517,16 @@
- */
- public void removePet(L2PetInstance pet)
- {
- - _petsInstance.remove(Integer.valueOf(pet.getOwner().getObjectId()));
- + _piWL.lock();
- +
- + try
- + {
- + _petsInstance.remove(pet.getOwner().getObjectId());
- + }
- + finally
- + {
- + _piWL.unlock();
- + }
- }
- /**
- @@ -348,7 +569,7 @@
- if (!player.isTeleporting())
- {
- - L2PcInstance tmp = _allPlayers.get(Integer.valueOf(player.getObjectId()));
- + L2PcInstance tmp = getPlayer(player.getObjectId());
- if (tmp != null)
- {
- _log.warning("Duplicate character!? Closing both characters (" + player.getName() + ")");
- @@ -356,7 +577,7 @@
- tmp.logout();
- return;
- }
- - _allPlayers.put(player.getObjectId(), player);
- + addToAllPlayers(player);
- }
- }
- @@ -394,7 +615,16 @@
- */
- public void addToAllPlayers(L2PcInstance cha)
- {
- - _allPlayers.put(cha.getObjectId(), cha);
- + _apWL.lock();
- +
- + try
- + {
- + _allPlayers.put(cha.getObjectId(), cha);
- + }
- + finally
- + {
- + _apWL.unlock();
- + }
- }
- /**
- @@ -406,7 +636,17 @@
- */
- public void removeFromAllPlayers(L2PcInstance cha)
- {
- - _allPlayers.remove(Integer.valueOf(cha.getObjectId()));
- + _apWL.lock();
- +
- + try
- + {
- + _allPlayers.remove(cha.getObjectId());
- + }
- + finally
- + {
- + _apWL.unlock();
- + }
- +
- }
- /**
- Index: java/com/l2jserver/gameserver/model/actor/instance/L2CastleTeleporterInstance.java
- ===================================================================
- --- java/com/l2jserver/gameserver/model/actor/instance/L2CastleTeleporterInstance.java (revision 4790)
- +++ java/com/l2jserver/gameserver/model/actor/instance/L2CastleTeleporterInstance.java (working copy)
- @@ -14,7 +14,8 @@
- */
- package com.l2jserver.gameserver.model.actor.instance;
- -import java.util.Collection;
- +import gnu.trove.TObjectProcedure;
- +
- import java.util.StringTokenizer;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- @@ -110,15 +111,7 @@
- NpcSay cs = new NpcSay(getObjectId(), 1, getNpcId(), 1000443); // The defenders of $s1 castle will be teleported to the inner castle.
- cs.addStringParameter(getCastle().getName());
- int region = MapRegionManager.getInstance().getMapRegionLocId(getX(), getY());
- - Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers().values();
- - //synchronized (L2World.getInstance().getAllPlayers())
- - {
- - for (L2PcInstance player : pls)
- - {
- - if (region == MapRegionManager.getInstance().getMapRegionLocId(player.getX(), player.getY()))
- - player.sendPacket(cs);
- - }
- - }
- + L2World.getInstance().forEachPlayer(new ForEachPlayerInRegionSendPacket(region, cs));
- oustAllPlayers();
- setTask(false);
- }
- @@ -129,6 +122,26 @@
- }
- }
- + private final class ForEachPlayerInRegionSendPacket implements TObjectProcedure<L2PcInstance>
- + {
- + int _region;
- + NpcSay _cs;
- +
- + private ForEachPlayerInRegionSendPacket(int region, NpcSay cs)
- + {
- + _region = region;
- + _cs = cs;
- + }
- +
- + @Override
- + public final boolean execute(final L2PcInstance player)
- + {
- + if (_region == MapRegionManager.getInstance().getMapRegionLocId(player.getX(), player.getY()))
- + player.sendPacket(_cs);
- + return true;
- + }
- + }
- +
- public boolean getTask()
- {
- return _currentTask;
- Index: java/com/l2jserver/gameserver/model/actor/instance/L2SepulcherNpcInstance.java
- ===================================================================
- --- java/com/l2jserver/gameserver/model/actor/instance/L2SepulcherNpcInstance.java (revision 4790)
- +++ java/com/l2jserver/gameserver/model/actor/instance/L2SepulcherNpcInstance.java (working copy)
- @@ -14,7 +14,8 @@
- */
- package com.l2jserver.gameserver.model.actor.instance;
- -import java.util.Collection;
- +import gnu.trove.TObjectProcedure;
- +
- import java.util.concurrent.Future;
- import com.l2jserver.Config;
- @@ -433,16 +434,29 @@
- {
- if (msg == null || msg.isEmpty())
- return;// wrong usage
- - Collection<L2PcInstance> knownPlayers = L2World.getInstance().getAllPlayers().values();
- - if (knownPlayers == null || knownPlayers.isEmpty())
- - return;
- - CreatureSay sm = new CreatureSay(0, Say2.SHOUT, this.getName(), msg);
- - for (L2PcInstance player : knownPlayers)
- +
- + L2World.getInstance().forEachPlayer(new SayInShout(this, new CreatureSay(0, Say2.SHOUT, this.getName(), msg)));
- + }
- +
- + private final class SayInShout implements TObjectProcedure<L2PcInstance>
- + {
- + L2SepulcherNpcInstance _npc;
- + CreatureSay _sm;
- +
- + private SayInShout(L2SepulcherNpcInstance npc, CreatureSay sm)
- {
- - if (player == null)
- - continue;
- - if (Util.checkIfInRange(15000, player, this, true))
- - player.sendPacket(sm);
- + _npc = npc;
- + _sm = sm;
- + }
- + @Override
- + public final boolean execute(final L2PcInstance player)
- + {
- + if (player != null)
- + {
- + if (Util.checkIfInRange(15000, player, _npc, true))
- + player.sendPacket(_sm);
- + }
- + return true;
- }
- }
- Index: java/com/l2jserver/gameserver/model/entity/Fort.java
- ===================================================================
- --- java/com/l2jserver/gameserver/model/entity/Fort.java (revision 4790)
- +++ java/com/l2jserver/gameserver/model/entity/Fort.java (working copy)
- @@ -15,12 +15,12 @@
- package com.l2jserver.gameserver.model.entity;
- import gnu.trove.TIntIntHashMap;
- +import gnu.trove.TObjectProcedure;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.util.Calendar;
- -import java.util.Collection;
- import java.util.List;
- import java.util.concurrent.ScheduledFuture;
- import java.util.concurrent.TimeUnit;
- @@ -965,11 +965,7 @@
- sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CLAN_IS_VICTORIOUS_IN_THE_FORTRESS_BATTLE_OF_S2);
- sm.addString(clan.getName());
- sm.addFortId(getFortId());
- - Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers().values();
- - for (L2PcInstance player : pls)
- - {
- - player.sendPacket(sm);
- - }
- + L2World.getInstance().forEachPlayer(new ForEachPlayerSendMessage(sm));
- clan.broadcastToOnlineMembers(new PledgeShowInfoUpdate(clan));
- clan.broadcastToOnlineMembers(new PlaySound(1, "Siege_Victory", 0, 0, 0, 0, 0));
- if (_FortUpdater[0] != null)
- @@ -1480,4 +1476,19 @@
- player.removeSkill(sk, false, true);
- }
- }
- +
- + private final class ForEachPlayerSendMessage implements TObjectProcedure<L2PcInstance>
- + {
- + SystemMessage _sm;
- + private ForEachPlayerSendMessage(SystemMessage sm)
- + {
- + _sm = sm;
- + }
- + @Override
- + public final boolean execute(final L2PcInstance character)
- + {
- + character.sendPacket(_sm);
- + return true;
- + }
- + }
- }
- Index: java/com/l2jserver/gameserver/model/entity/L2Event.java
- ===================================================================
- --- java/com/l2jserver/gameserver/model/entity/L2Event.java (revision 4790)
- +++ java/com/l2jserver/gameserver/model/entity/L2Event.java (working copy)
- @@ -372,7 +372,7 @@
- _eventInfo = inbr.readLine();
- List<L2PcInstance> temp = new FastList<L2PcInstance>();
- - for (L2PcInstance player : L2World.getInstance().getAllPlayers().values())
- + for (L2PcInstance player : L2World.getInstance().getAllPlayersArray())
- {
- if (!player.isOnline()) // Offline shops?
- continue;
- Index: java/com/l2jserver/gameserver/network/clientpackets/RequestStartPledgeWar.java
- ===================================================================
- --- java/com/l2jserver/gameserver/network/clientpackets/RequestStartPledgeWar.java (revision 4790)
- +++ java/com/l2jserver/gameserver/network/clientpackets/RequestStartPledgeWar.java (working copy)
- @@ -14,7 +14,7 @@
- */
- package com.l2jserver.gameserver.network.clientpackets;
- -import java.util.Collection;
- +import gnu.trove.TObjectProcedure;
- import com.l2jserver.Config;
- import com.l2jserver.gameserver.datatables.ClanTable;
- @@ -135,12 +135,22 @@
- // leader.sendPacket(new StartPledgeWar(_clan.getName(),player.getName()));
- ClanTable.getInstance().storeclanswars(player.getClanId(), clan.getClanId());
- - Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers().values();
- - //synchronized (L2World.getInstance().getAllPlayers())
- + L2World.getInstance().forEachPlayer(new ForEachPlayerBroadcastUserInfo(clan));
- + }
- +
- + private final class ForEachPlayerBroadcastUserInfo implements TObjectProcedure<L2PcInstance>
- + {
- + L2Clan _cln;
- + private ForEachPlayerBroadcastUserInfo(L2Clan clan)
- {
- - for (L2PcInstance cha : pls)
- - if (cha.getClan() == player.getClan() || cha.getClan() == clan)
- - cha.broadcastUserInfo();
- + _cln = clan;
- + }
- + @Override
- + public final boolean execute(final L2PcInstance cha)
- + {
- + if (cha.getClan() == player.getClan() || cha.getClan() == _cln)
- + cha.broadcastUserInfo();
- + return true;
- }
- }
- Index: java/com/l2jserver/gameserver/network/clientpackets/RequestStopPledgeWar.java
- ===================================================================
- --- java/com/l2jserver/gameserver/network/clientpackets/RequestStopPledgeWar.java (revision 4790)
- +++ java/com/l2jserver/gameserver/network/clientpackets/RequestStopPledgeWar.java (working copy)
- @@ -14,7 +14,7 @@
- */
- package com.l2jserver.gameserver.network.clientpackets;
- -import java.util.Collection;
- +import gnu.trove.TObjectProcedure;
- import com.l2jserver.gameserver.datatables.ClanTable;
- import com.l2jserver.gameserver.model.L2Clan;
- @@ -102,12 +102,24 @@
- }
- ClanTable.getInstance().deleteclanswars(playerClan.getClanId(), clan.getClanId());
- - Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers().values();
- - //synchronized (L2World.getInstance().getAllPlayers())
- + L2World.getInstance().forEachPlayer(new ForEachPlayerBroadcastUserInfo(clan, player));
- + }
- +
- + private final class ForEachPlayerBroadcastUserInfo implements TObjectProcedure<L2PcInstance>
- + {
- + L2PcInstance _player;
- + L2Clan _cln;
- + private ForEachPlayerBroadcastUserInfo(L2Clan clan, L2PcInstance player)
- {
- - for (L2PcInstance cha : pls)
- - if (cha.getClan() == player.getClan() || cha.getClan() == clan)
- - cha.broadcastUserInfo();
- + _cln = clan;
- + _player = player;
- + }
- + @Override
- + public final boolean execute(final L2PcInstance cha)
- + {
- + if (cha.getClan() == _player.getClan() || cha.getClan() == _cln)
- + cha.broadcastUserInfo();
- + return true;
- }
- }
- Index: java/com/l2jserver/gameserver/util/Broadcast.java
- ===================================================================
- --- java/com/l2jserver/gameserver/util/Broadcast.java (revision 4790)
- +++ java/com/l2jserver/gameserver/util/Broadcast.java (working copy)
- @@ -24,6 +24,8 @@
- */
- package com.l2jserver.gameserver.util;
- +import gnu.trove.TObjectProcedure;
- +
- import java.util.Collection;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- @@ -218,13 +220,7 @@
- if (Config.DEBUG)
- _log.fine("Players to notify: " + L2World.getInstance().getAllPlayersCount() + " (with packet " + mov.getType() + ")");
- - Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers().values();
- - // synchronized (L2World.getInstance().getAllPlayers())
- - {
- - for (L2PcInstance onlinePlayer : pls)
- - if (onlinePlayer != null && onlinePlayer.isOnline())
- - onlinePlayer.sendPacket(mov);
- - }
- + L2World.getInstance().forEachPlayer(new ForEachPlayerBroadcast(mov));
- }
- public static void announceToOnlinePlayers(String text)
- @@ -235,14 +231,42 @@
- public static void toPlayersInInstance(L2GameServerPacket mov, int instanceId)
- {
- - Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers().values();
- - //synchronized (character.getKnownList().getKnownPlayers())
- + L2World.getInstance().forEachPlayer(new ForEachPlayerInInstanceBroadcast(mov, instanceId));
- + }
- +
- + private static final class ForEachPlayerBroadcast implements TObjectProcedure<L2PcInstance>
- + {
- + L2GameServerPacket _packet;
- + private ForEachPlayerBroadcast(L2GameServerPacket packet)
- {
- - for (L2PcInstance onlinePlayer : pls)
- - {
- - if (onlinePlayer != null && onlinePlayer.isOnline() && onlinePlayer.getInstanceId() == instanceId)
- - onlinePlayer.sendPacket(mov);
- - }
- + _packet = packet;
- + }
- +
- + @Override
- + public final boolean execute(final L2PcInstance onlinePlayer)
- + {
- + if (onlinePlayer != null && onlinePlayer.isOnline())
- + onlinePlayer.sendPacket(_packet);
- + return true;
- + }
- + }
- +
- + private static final class ForEachPlayerInInstanceBroadcast implements TObjectProcedure<L2PcInstance>
- + {
- + L2GameServerPacket _packet;
- + int _instanceId;
- + private ForEachPlayerInInstanceBroadcast(L2GameServerPacket packet, int instanceId)
- + {
- + _packet = packet;
- + _instanceId = instanceId;
- + }
- +
- + @Override
- + public final boolean execute(final L2PcInstance onlinePlayer)
- + {
- + if (onlinePlayer != null && onlinePlayer.isOnline() && onlinePlayer.getInstanceId() == _instanceId)
- + onlinePlayer.sendPacket(_packet);
- + return true;
- }
- }
- }
- Index: java/com/l2jserver/status/GameStatusThread.java
- ===================================================================
- --- java/com/l2jserver/status/GameStatusThread.java (revision 4790)
- +++ java/com/l2jserver/status/GameStatusThread.java (working copy)
- @@ -34,7 +34,6 @@
- import java.text.DecimalFormat;
- import java.text.SimpleDateFormat;
- import java.util.Calendar;
- -import java.util.Collection;
- import java.util.Map;
- import java.util.Map.Entry;
- import java.util.NoSuchElementException;
- @@ -856,10 +855,9 @@
- // name;type;x;y;itemId:enchant:price...
- if (type.equals("privatestore"))
- {
- - Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers().values();
- //synchronized (L2World.getInstance().getAllPlayers())
- {
- - for (L2PcInstance player : pls)
- + for (L2PcInstance player : L2World.getInstance().getAllPlayersArray())
- {
- if (player.getPrivateStoreType() == 0)
- continue;
- @@ -1087,10 +1085,9 @@
- int summonCount = 0;
- int AICount = 0;
- - Collection<L2Object> objs = L2World.getInstance().getAllVisibleObjects().values();
- //synchronized (L2World.getInstance().getAllVisibleObjects())
- {
- - for (L2Object obj : objs)
- + for (L2Object obj : L2World.getInstance().getAllVisibleObjectsArray())
- {
- if (obj == null)
- continue;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement