diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/GameServer.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/GameServer.java index 1b7d084ad0..e8b44b5918 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/GameServer.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/GameServer.java @@ -102,7 +102,6 @@ import org.l2jmobius.gameserver.geoengine.GeoEngine; import org.l2jmobius.gameserver.handler.ConditionHandler; import org.l2jmobius.gameserver.handler.EffectHandler; import org.l2jmobius.gameserver.handler.SkillConditionHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AirShipManager; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.BoatManager; @@ -121,6 +120,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.GraciaSeedsManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.instancemanager.ItemAuctionManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; @@ -203,9 +203,9 @@ public class GameServer printSection("ThreadPool"); ThreadPool.init(); - printSection("IdFactory"); - IdFactory.init(); - if (!IdFactory.hasInitialized()) + printSection("IdManager"); + IdManager.getInstance(); + if (!IdManager.hasInitialized()) { LOGGER.severe(getClass().getSimpleName() + ": Could not read object IDs from database. Please check your configuration."); throw new Exception("Could not initialize the ID factory!"); @@ -415,7 +415,7 @@ public class GameServer Runtime.getRuntime().addShutdownHook(Shutdown.getInstance()); - LOGGER.info("IdFactory: Free ObjectID's remaining: " + IdFactory.size()); + LOGGER.info("IdManager: Free ObjectID's remaining: " + IdManager.size()); if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS) { diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java index f86996527b..27bc7fd289 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java @@ -35,9 +35,9 @@ import org.l2jmobius.gameserver.communitybbs.Manager.ForumsBBSManager; import org.l2jmobius.gameserver.data.xml.impl.ClanHallData; import org.l2jmobius.gameserver.enums.ClanWarState; import org.l2jmobius.gameserver.enums.UserInfoType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.SiegeManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -195,7 +195,7 @@ public class ClanTable return null; } - final Clan clan = new Clan(IdFactory.getNextId(), clanName); + final Clan clan = new Clan(IdManager.getInstance().getNextId(), clanName); final ClanMember leader = new ClanMember(clan, player); clan.setLeader(leader); leader.setPlayerInstance(player); @@ -267,7 +267,7 @@ public class ClanTable } _clans.remove(clanId); - IdFactory.releaseId(clanId); + IdManager.getInstance().releaseId(clanId); try (Connection con = DatabaseFactory.getConnection()) { diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/datatables/ItemTable.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/datatables/ItemTable.java index bfae3f7a36..facda38df8 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/datatables/ItemTable.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/datatables/ItemTable.java @@ -34,7 +34,7 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.data.xml.impl.EnchantItemHPBonusData; import org.l2jmobius.gameserver.engines.DocumentEngine; import org.l2jmobius.gameserver.enums.ItemLocation; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Attackable; @@ -209,7 +209,7 @@ public class ItemTable public ItemInstance createItem(String process, int itemId, long count, Creature actor, Object reference) { // Create and Init the ItemInstance corresponding to the Item Identifier - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); if (process.equalsIgnoreCase("loot") && !Config.AUTO_LOOT_ITEM_IDS.contains(itemId)) { ScheduledFuture itemLootShedule; @@ -327,7 +327,7 @@ public class ItemTable item.setLastChange(ItemInstance.REMOVED); World.getInstance().removeObject(item); - IdFactory.releaseId(item.getObjectId()); + IdManager.getInstance().releaseId(item.getObjectId()); if (Config.LOG_ITEMS) { diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/idfactory/IdFactory.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/instancemanager/IdManager.java similarity index 79% rename from L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/idfactory/IdFactory.java rename to L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/instancemanager/IdManager.java index d4447a7dea..d595a5befa 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/idfactory/IdFactory.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/instancemanager/IdManager.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.l2jmobius.gameserver.idfactory; +package org.l2jmobius.gameserver.instancemanager; import java.sql.Connection; import java.sql.PreparedStatement; @@ -33,39 +33,12 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.util.PrimeFinder; /** - * @author Mobius (reworked from L2J version) + * @author Mobius (reworked from L2J IdFactory) */ -public abstract class IdFactory +public class IdManager { - private static final Logger LOGGER = Logger.getLogger(IdFactory.class.getName()); + private static final Logger LOGGER = Logger.getLogger(IdManager.class.getName()); - protected static final String[] ID_CHECKS = - { - "SELECT owner_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT object_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT charId FROM character_quests WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_contacts WHERE charId >= ? AND charId < ?", - "SELECT contactId FROM character_contacts WHERE contactId >= ? AND contactId < ?", - "SELECT charId FROM character_friends WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_friends WHERE friendId >= ? AND friendId < ?", - "SELECT charId FROM character_hennas WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipebook WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipeshoplist WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_shortcuts WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_macroses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills_save WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_subclasses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM characters WHERE charId >= ? AND charId < ?", - "SELECT clanid FROM characters WHERE clanid >= ? AND clanid < ?", - "SELECT clan_id FROM clan_data WHERE clan_id >= ? AND clan_id < ?", - "SELECT clan_id FROM siege_clans WHERE clan_id >= ? AND clan_id < ?", - "SELECT ally_id FROM clan_data WHERE ally_id >= ? AND ally_id < ?", - "SELECT leader_id FROM clan_data WHERE leader_id >= ? AND leader_id < ?", - "SELECT item_obj_id FROM pets WHERE item_obj_id >= ? AND item_obj_id < ?", - "SELECT object_id FROM itemsonground WHERE object_id >= ? AND object_id < ?", - "SELECT summonId FROM characters_summons WHERE summonId >= ? AND summonId < ?" - }; //@formatter:off private static final String[][] ID_EXTRACTS = { @@ -76,21 +49,23 @@ public abstract class IdFactory {"messages","messageId"} }; //@formatter:on + private static final String[] TIMESTAMPS_CLEAN = { "DELETE FROM character_instance_time WHERE time <= ?", "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" }; - public static final int FIRST_OID = 0x10000000; - public static final int LAST_OID = 0x7FFFFFFF; - public static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; + + private static final int FIRST_OID = 0x10000000; + private static final int LAST_OID = 0x7FFFFFFF; + private static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; private static BitSet _freeIds; private static AtomicInteger _freeIdCount; private static AtomicInteger _nextFreeId; private static boolean _initialized; - public static void init() + public IdManager() { // Update characters online status. try (Connection con = DatabaseFactory.getConnection(); @@ -101,7 +76,7 @@ public abstract class IdFactory } catch (Exception e) { - LOGGER.warning("IdFactory: Could not update characters online status: " + e); + LOGGER.warning("IdManager: Could not update characters online status: " + e); } // Cleanup database. @@ -182,11 +157,11 @@ public abstract class IdFactory statement.executeUpdate("UPDATE characters SET clanid=0, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0, clan_join_expiry_time=0, clan_create_expiry_time=0 WHERE characters.clanid > 0 AND characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); - LOGGER.info("IdFactory: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); + LOGGER.info("IdManager: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); } catch (Exception e) { - LOGGER.warning("IdFactory: Could not clean up database: " + e); + LOGGER.warning("IdManager: Could not clean up database: " + e); } } @@ -202,11 +177,11 @@ public abstract class IdFactory cleanCount += statement.executeUpdate(); } } - LOGGER.info("IdFactory: Cleaned " + cleanCount + " expired timestamps from database."); + LOGGER.info("IdManager: Cleaned " + cleanCount + " expired timestamps from database."); } catch (Exception e) { - LOGGER.warning("IdFactory: Could not clean expired timestamps from database. " + e); + LOGGER.warning("IdManager: Could not clean expired timestamps from database. " + e); } // Initialize. @@ -243,7 +218,7 @@ public abstract class IdFactory final int objectId = usedObjectId - FIRST_OID; if (objectId < 0) { - LOGGER.warning("IdFactory: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); + LOGGER.warning("IdManager: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); continue; } _freeIds.set(usedObjectId - FIRST_OID); @@ -256,7 +231,7 @@ public abstract class IdFactory catch (Exception e) { _initialized = false; - LOGGER.severe("IdFactory: Could not be initialized properly: " + e.getMessage()); + LOGGER.severe("IdManager: Could not be initialized properly: " + e.getMessage()); } // Schedule increase capacity task. @@ -271,10 +246,10 @@ public abstract class IdFactory } }, 30000, 30000); - LOGGER.info("IdFactory: " + _freeIds.size() + " id's available."); + LOGGER.info("IdManager: " + _freeIds.size() + " id's available."); } - public synchronized static void releaseId(int objectId) + public void releaseId(int objectId) { synchronized (_nextFreeId) { @@ -285,12 +260,12 @@ public abstract class IdFactory } else { - LOGGER.warning("IdFactory: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); + LOGGER.warning("IdManager: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); } } } - public synchronized static int getNextId() + public int getNextId() { synchronized (_nextFreeId) { @@ -303,7 +278,7 @@ public abstract class IdFactory { if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) { - throw new NullPointerException("IdFactory: Ran out of valid ids."); + throw new NullPointerException("IdManager: Ran out of valid ids."); } increaseBitSetCapacity(); } @@ -313,14 +288,14 @@ public abstract class IdFactory } } - private static void increaseBitSetCapacity() + private void increaseBitSetCapacity() { final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); newBitSet.or(_freeIds); _freeIds = newBitSet; } - private static int usedIdCount() + private int usedIdCount() { return _freeIdCount.get() - FIRST_OID; } @@ -334,4 +309,14 @@ public abstract class IdFactory { return _initialized; } + + public static IdManager getInstance() + { + return SingletonHolder.INSTANCE; + } + + private static class SingletonHolder + { + protected static final IdManager INSTANCE = new IdManager(); + } } diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/instancemanager/MailManager.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/instancemanager/MailManager.java index 176b407caa..2a82541b39 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/instancemanager/MailManager.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/instancemanager/MailManager.java @@ -31,7 +31,6 @@ import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.entity.Message; @@ -277,7 +276,7 @@ public class MailManager } _messages.remove(msgId); - IdFactory.releaseId(msgId); + IdManager.getInstance().releaseId(msgId); } /** diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/Petition.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/Petition.java index 0c1524f59b..b19b6f9025 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/Petition.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/Petition.java @@ -21,7 +21,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.PetitionState; import org.l2jmobius.gameserver.enums.PetitionType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.PetitionManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -47,7 +47,7 @@ public class Petition public Petition(PlayerInstance petitioner, String petitionText, int petitionType) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _type = PetitionType.values()[petitionType - 1]; _content = petitionText; _petitioner = petitioner; diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/WorldObject.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/WorldObject.java index 18e793a718..3b8f7fb5fb 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/WorldObject.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/WorldObject.java @@ -24,7 +24,7 @@ import org.l2jmobius.gameserver.handler.ActionHandler; import org.l2jmobius.gameserver.handler.ActionShiftHandler; import org.l2jmobius.gameserver.handler.IActionHandler; import org.l2jmobius.gameserver.handler.IActionShiftHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; @@ -154,8 +154,8 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif public void refreshId() { World.getInstance().removeObject(this); - IdFactory.releaseId(getObjectId()); - _objectId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(getObjectId()); + _objectId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Creature.java index d7ffde99ee..e645f5a67a 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -63,7 +63,7 @@ import org.l2jmobius.gameserver.enums.Team; import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MapRegionManager; import org.l2jmobius.gameserver.instancemanager.QuestManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; @@ -288,7 +288,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public Creature(CreatureTemplate template) { - this(IdFactory.getNextId(), template); + this(IdManager.getInstance().getNextId(), template); } /** diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java index d132ad18fc..12209da801 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java @@ -20,7 +20,7 @@ import java.util.concurrent.Future; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.gameserver.enums.InstanceType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.stat.ControllableAirShipStat; import org.l2jmobius.gameserver.model.actor.templates.CreatureTemplate; import org.l2jmobius.gameserver.model.skills.AbnormalType; @@ -48,7 +48,7 @@ public class ControllableAirShipInstance extends AirShipInstance super(template); setInstanceType(InstanceType.ControllableAirShipInstance); _ownerId = ownerId; - _helmId = IdFactory.getNextId(); // not forget to release ! + _helmId = IdManager.getInstance().getNextId(); // not forget to release ! } @Override @@ -282,8 +282,8 @@ public class ControllableAirShipInstance extends AirShipInstance public void refreshId() { super.refreshId(); - IdFactory.releaseId(_helmId); - _helmId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(_helmId); + _helmId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java index 48c52c920f..c8412e68be 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.actor.instance; import org.l2jmobius.gameserver.data.xml.impl.FenceData; import org.l2jmobius.gameserver.enums.FenceState; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; @@ -44,7 +44,7 @@ public class FenceInstance extends WorldObject public FenceInstance(int x, int y, String name, int width, int length, int height, FenceState state) { - super(IdFactory.getNextId()); + super(IdManager.getInstance().getNextId()); _xMin = x - (width / 2); _xMax = x + (width / 2); @@ -59,7 +59,7 @@ public class FenceInstance extends WorldObject _heightFences = new int[height - 1]; for (int i = 0; i < _heightFences.length; i++) { - _heightFences[i] = IdFactory.getNextId(); + _heightFences[i] = IdManager.getInstance().getNextId(); } } } diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 02ea20b5b7..b733a393ed 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -104,7 +104,6 @@ import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; import org.l2jmobius.gameserver.handler.IItemHandler; import org.l2jmobius.gameserver.handler.ItemHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CursedWeaponsManager; @@ -113,6 +112,7 @@ import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.HandysBlockCheckerManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager; import org.l2jmobius.gameserver.instancemanager.MentorManager; @@ -1141,7 +1141,7 @@ public class PlayerInstance extends Playable */ private PlayerInstance(PlayerTemplate template, String accountName, PlayerAppearance app) { - this(IdFactory.getNextId(), template, accountName, app); + this(IdManager.getInstance().getNextId(), template, accountName, app); } @Override diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java index 0564bbbe5e..b493b68bcc 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java @@ -21,7 +21,7 @@ import java.util.Locale; import org.l2jmobius.Config; import org.l2jmobius.commons.util.StringUtil; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.HistoryInfo; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.RaceState; @@ -160,7 +160,7 @@ public class RaceManagerInstance extends Npc player.setRace(0, 0); player.setRace(1, 0); - ItemInstance item = new ItemInstance(IdFactory.getNextId(), 4443); + ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 4443); item.setCount(1); item.setEnchantLevel(MonsterRace.getInstance().getRaceNumber()); item.setCustomType1(ticket); diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java index 6762897720..929d68a27f 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.announce; import java.util.Date; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.script.DateRange; /** @@ -32,7 +32,7 @@ public class EventAnnouncement implements IAnnouncement public EventAnnouncement(DateRange range, String content) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _range = range; _content = content; } @@ -88,7 +88,7 @@ public class EventAnnouncement implements IAnnouncement @Override public boolean deleteMe() { - IdFactory.releaseId(_id); + IdManager.getInstance().releaseId(_id); return true; } diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/entity/Couple.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/entity/Couple.java index 6897b8d681..54104ff7ab 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/entity/Couple.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/entity/Couple.java @@ -24,7 +24,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; /** @@ -85,7 +85,7 @@ public class Couple try (Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO mods_wedding (id, player1Id, player2Id, married, affianceDate, weddingDate) VALUES (?, ?, ?, ?, ?, ?)")) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); ps.setInt(1, _id); ps.setInt(2, _player1Id); ps.setInt(3, _player2Id); diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/entity/Message.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/entity/Message.java index 1b0ebe1d93..9002ebdc1a 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/entity/Message.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/entity/Message.java @@ -24,7 +24,7 @@ import java.sql.SQLException; import org.l2jmobius.gameserver.data.sql.impl.CharNameTable; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MailManager; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -99,7 +99,7 @@ public class Message */ public Message(int senderId, int receiverId, boolean isCod, String subject, String text, long reqAdena) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -118,7 +118,7 @@ public class Message */ public Message(int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = subject; @@ -138,7 +138,7 @@ public class Message */ public Message(int senderId, int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -157,7 +157,7 @@ public class Message */ public Message(Message msg) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = msg.getSenderId(); _receiverId = msg.getSenderId(); _subject = ""; @@ -177,7 +177,7 @@ public class Message public Message(int receiverId, ItemInstance item, MailType mailType) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = ""; diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java index e1e27e6111..800fb576c7 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java @@ -17,7 +17,7 @@ package org.l2jmobius.gameserver.model.itemauction; import org.l2jmobius.gameserver.datatables.ItemTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -78,7 +78,7 @@ public class AuctionItem public ItemInstance createNewItemInstance() { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), _itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), _itemId); World.getInstance().addObject(item); item.setCount(_itemCount); item.setEnchantLevel(item.getItem().getDefaultEnchantLevel()); diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 0a9d8b9551..eb7a85778d 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -46,8 +46,8 @@ import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemSkillType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.CastleManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.SiegeGuardManager; import org.l2jmobius.gameserver.model.DropProtection; @@ -254,7 +254,7 @@ public class ItemInstance extends WorldObject */ public ItemInstance(int itemId) { - this(IdFactory.getNextId(), itemId); + this(IdManager.getInstance().getNextId(), itemId); } /** diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java index ee2437143a..7fa54aa75e 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java @@ -16,7 +16,7 @@ */ package org.l2jmobius.gameserver.model.zone; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -50,7 +50,7 @@ public abstract class ZoneForm protected final void dropDebugItem(int itemId, int num, int x, int y, int z) { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); item.setCount(num); item.spawnMe(x, y, z + 5); ZoneManager.getInstance().getDebugItems().add(item); diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/GameServer.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/GameServer.java index 5fab875a5f..5e76ceb5d7 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/GameServer.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/GameServer.java @@ -106,7 +106,6 @@ import org.l2jmobius.gameserver.handler.ConditionHandler; import org.l2jmobius.gameserver.handler.DailyMissionHandler; import org.l2jmobius.gameserver.handler.EffectHandler; import org.l2jmobius.gameserver.handler.SkillConditionHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AirShipManager; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.BoatManager; @@ -125,6 +124,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.GraciaSeedsManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.instancemanager.ItemAuctionManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; @@ -207,9 +207,9 @@ public class GameServer printSection("ThreadPool"); ThreadPool.init(); - printSection("IdFactory"); - IdFactory.init(); - if (!IdFactory.hasInitialized()) + printSection("IdManager"); + IdManager.getInstance(); + if (!IdManager.hasInitialized()) { LOGGER.severe(getClass().getSimpleName() + ": Could not read object IDs from database. Please check your configuration."); throw new Exception("Could not initialize the ID factory!"); @@ -423,7 +423,7 @@ public class GameServer Runtime.getRuntime().addShutdownHook(Shutdown.getInstance()); - LOGGER.info("IdFactory: Free ObjectID's remaining: " + IdFactory.size()); + LOGGER.info("IdManager: Free ObjectID's remaining: " + IdManager.size()); if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS) { diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java index f86996527b..27bc7fd289 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java @@ -35,9 +35,9 @@ import org.l2jmobius.gameserver.communitybbs.Manager.ForumsBBSManager; import org.l2jmobius.gameserver.data.xml.impl.ClanHallData; import org.l2jmobius.gameserver.enums.ClanWarState; import org.l2jmobius.gameserver.enums.UserInfoType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.SiegeManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -195,7 +195,7 @@ public class ClanTable return null; } - final Clan clan = new Clan(IdFactory.getNextId(), clanName); + final Clan clan = new Clan(IdManager.getInstance().getNextId(), clanName); final ClanMember leader = new ClanMember(clan, player); clan.setLeader(leader); leader.setPlayerInstance(player); @@ -267,7 +267,7 @@ public class ClanTable } _clans.remove(clanId); - IdFactory.releaseId(clanId); + IdManager.getInstance().releaseId(clanId); try (Connection con = DatabaseFactory.getConnection()) { diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/datatables/ItemTable.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/datatables/ItemTable.java index bfae3f7a36..facda38df8 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/datatables/ItemTable.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/datatables/ItemTable.java @@ -34,7 +34,7 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.data.xml.impl.EnchantItemHPBonusData; import org.l2jmobius.gameserver.engines.DocumentEngine; import org.l2jmobius.gameserver.enums.ItemLocation; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Attackable; @@ -209,7 +209,7 @@ public class ItemTable public ItemInstance createItem(String process, int itemId, long count, Creature actor, Object reference) { // Create and Init the ItemInstance corresponding to the Item Identifier - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); if (process.equalsIgnoreCase("loot") && !Config.AUTO_LOOT_ITEM_IDS.contains(itemId)) { ScheduledFuture itemLootShedule; @@ -327,7 +327,7 @@ public class ItemTable item.setLastChange(ItemInstance.REMOVED); World.getInstance().removeObject(item); - IdFactory.releaseId(item.getObjectId()); + IdManager.getInstance().releaseId(item.getObjectId()); if (Config.LOG_ITEMS) { diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/idfactory/IdFactory.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/instancemanager/IdManager.java similarity index 79% rename from L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/idfactory/IdFactory.java rename to L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/instancemanager/IdManager.java index d4447a7dea..d595a5befa 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/idfactory/IdFactory.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/instancemanager/IdManager.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.l2jmobius.gameserver.idfactory; +package org.l2jmobius.gameserver.instancemanager; import java.sql.Connection; import java.sql.PreparedStatement; @@ -33,39 +33,12 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.util.PrimeFinder; /** - * @author Mobius (reworked from L2J version) + * @author Mobius (reworked from L2J IdFactory) */ -public abstract class IdFactory +public class IdManager { - private static final Logger LOGGER = Logger.getLogger(IdFactory.class.getName()); + private static final Logger LOGGER = Logger.getLogger(IdManager.class.getName()); - protected static final String[] ID_CHECKS = - { - "SELECT owner_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT object_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT charId FROM character_quests WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_contacts WHERE charId >= ? AND charId < ?", - "SELECT contactId FROM character_contacts WHERE contactId >= ? AND contactId < ?", - "SELECT charId FROM character_friends WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_friends WHERE friendId >= ? AND friendId < ?", - "SELECT charId FROM character_hennas WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipebook WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipeshoplist WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_shortcuts WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_macroses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills_save WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_subclasses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM characters WHERE charId >= ? AND charId < ?", - "SELECT clanid FROM characters WHERE clanid >= ? AND clanid < ?", - "SELECT clan_id FROM clan_data WHERE clan_id >= ? AND clan_id < ?", - "SELECT clan_id FROM siege_clans WHERE clan_id >= ? AND clan_id < ?", - "SELECT ally_id FROM clan_data WHERE ally_id >= ? AND ally_id < ?", - "SELECT leader_id FROM clan_data WHERE leader_id >= ? AND leader_id < ?", - "SELECT item_obj_id FROM pets WHERE item_obj_id >= ? AND item_obj_id < ?", - "SELECT object_id FROM itemsonground WHERE object_id >= ? AND object_id < ?", - "SELECT summonId FROM characters_summons WHERE summonId >= ? AND summonId < ?" - }; //@formatter:off private static final String[][] ID_EXTRACTS = { @@ -76,21 +49,23 @@ public abstract class IdFactory {"messages","messageId"} }; //@formatter:on + private static final String[] TIMESTAMPS_CLEAN = { "DELETE FROM character_instance_time WHERE time <= ?", "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" }; - public static final int FIRST_OID = 0x10000000; - public static final int LAST_OID = 0x7FFFFFFF; - public static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; + + private static final int FIRST_OID = 0x10000000; + private static final int LAST_OID = 0x7FFFFFFF; + private static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; private static BitSet _freeIds; private static AtomicInteger _freeIdCount; private static AtomicInteger _nextFreeId; private static boolean _initialized; - public static void init() + public IdManager() { // Update characters online status. try (Connection con = DatabaseFactory.getConnection(); @@ -101,7 +76,7 @@ public abstract class IdFactory } catch (Exception e) { - LOGGER.warning("IdFactory: Could not update characters online status: " + e); + LOGGER.warning("IdManager: Could not update characters online status: " + e); } // Cleanup database. @@ -182,11 +157,11 @@ public abstract class IdFactory statement.executeUpdate("UPDATE characters SET clanid=0, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0, clan_join_expiry_time=0, clan_create_expiry_time=0 WHERE characters.clanid > 0 AND characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); - LOGGER.info("IdFactory: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); + LOGGER.info("IdManager: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); } catch (Exception e) { - LOGGER.warning("IdFactory: Could not clean up database: " + e); + LOGGER.warning("IdManager: Could not clean up database: " + e); } } @@ -202,11 +177,11 @@ public abstract class IdFactory cleanCount += statement.executeUpdate(); } } - LOGGER.info("IdFactory: Cleaned " + cleanCount + " expired timestamps from database."); + LOGGER.info("IdManager: Cleaned " + cleanCount + " expired timestamps from database."); } catch (Exception e) { - LOGGER.warning("IdFactory: Could not clean expired timestamps from database. " + e); + LOGGER.warning("IdManager: Could not clean expired timestamps from database. " + e); } // Initialize. @@ -243,7 +218,7 @@ public abstract class IdFactory final int objectId = usedObjectId - FIRST_OID; if (objectId < 0) { - LOGGER.warning("IdFactory: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); + LOGGER.warning("IdManager: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); continue; } _freeIds.set(usedObjectId - FIRST_OID); @@ -256,7 +231,7 @@ public abstract class IdFactory catch (Exception e) { _initialized = false; - LOGGER.severe("IdFactory: Could not be initialized properly: " + e.getMessage()); + LOGGER.severe("IdManager: Could not be initialized properly: " + e.getMessage()); } // Schedule increase capacity task. @@ -271,10 +246,10 @@ public abstract class IdFactory } }, 30000, 30000); - LOGGER.info("IdFactory: " + _freeIds.size() + " id's available."); + LOGGER.info("IdManager: " + _freeIds.size() + " id's available."); } - public synchronized static void releaseId(int objectId) + public void releaseId(int objectId) { synchronized (_nextFreeId) { @@ -285,12 +260,12 @@ public abstract class IdFactory } else { - LOGGER.warning("IdFactory: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); + LOGGER.warning("IdManager: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); } } } - public synchronized static int getNextId() + public int getNextId() { synchronized (_nextFreeId) { @@ -303,7 +278,7 @@ public abstract class IdFactory { if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) { - throw new NullPointerException("IdFactory: Ran out of valid ids."); + throw new NullPointerException("IdManager: Ran out of valid ids."); } increaseBitSetCapacity(); } @@ -313,14 +288,14 @@ public abstract class IdFactory } } - private static void increaseBitSetCapacity() + private void increaseBitSetCapacity() { final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); newBitSet.or(_freeIds); _freeIds = newBitSet; } - private static int usedIdCount() + private int usedIdCount() { return _freeIdCount.get() - FIRST_OID; } @@ -334,4 +309,14 @@ public abstract class IdFactory { return _initialized; } + + public static IdManager getInstance() + { + return SingletonHolder.INSTANCE; + } + + private static class SingletonHolder + { + protected static final IdManager INSTANCE = new IdManager(); + } } diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/instancemanager/MailManager.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/instancemanager/MailManager.java index 176b407caa..2a82541b39 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/instancemanager/MailManager.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/instancemanager/MailManager.java @@ -31,7 +31,6 @@ import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.entity.Message; @@ -277,7 +276,7 @@ public class MailManager } _messages.remove(msgId); - IdFactory.releaseId(msgId); + IdManager.getInstance().releaseId(msgId); } /** diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/Petition.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/Petition.java index 0c1524f59b..b19b6f9025 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/Petition.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/Petition.java @@ -21,7 +21,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.PetitionState; import org.l2jmobius.gameserver.enums.PetitionType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.PetitionManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -47,7 +47,7 @@ public class Petition public Petition(PlayerInstance petitioner, String petitionText, int petitionType) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _type = PetitionType.values()[petitionType - 1]; _content = petitionText; _petitioner = petitioner; diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/WorldObject.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/WorldObject.java index 18e793a718..3b8f7fb5fb 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/WorldObject.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/WorldObject.java @@ -24,7 +24,7 @@ import org.l2jmobius.gameserver.handler.ActionHandler; import org.l2jmobius.gameserver.handler.ActionShiftHandler; import org.l2jmobius.gameserver.handler.IActionHandler; import org.l2jmobius.gameserver.handler.IActionShiftHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; @@ -154,8 +154,8 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif public void refreshId() { World.getInstance().removeObject(this); - IdFactory.releaseId(getObjectId()); - _objectId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(getObjectId()); + _objectId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Creature.java index d7ffde99ee..e645f5a67a 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -63,7 +63,7 @@ import org.l2jmobius.gameserver.enums.Team; import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MapRegionManager; import org.l2jmobius.gameserver.instancemanager.QuestManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; @@ -288,7 +288,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public Creature(CreatureTemplate template) { - this(IdFactory.getNextId(), template); + this(IdManager.getInstance().getNextId(), template); } /** diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java index d132ad18fc..12209da801 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java @@ -20,7 +20,7 @@ import java.util.concurrent.Future; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.gameserver.enums.InstanceType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.stat.ControllableAirShipStat; import org.l2jmobius.gameserver.model.actor.templates.CreatureTemplate; import org.l2jmobius.gameserver.model.skills.AbnormalType; @@ -48,7 +48,7 @@ public class ControllableAirShipInstance extends AirShipInstance super(template); setInstanceType(InstanceType.ControllableAirShipInstance); _ownerId = ownerId; - _helmId = IdFactory.getNextId(); // not forget to release ! + _helmId = IdManager.getInstance().getNextId(); // not forget to release ! } @Override @@ -282,8 +282,8 @@ public class ControllableAirShipInstance extends AirShipInstance public void refreshId() { super.refreshId(); - IdFactory.releaseId(_helmId); - _helmId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(_helmId); + _helmId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java index 48c52c920f..c8412e68be 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.actor.instance; import org.l2jmobius.gameserver.data.xml.impl.FenceData; import org.l2jmobius.gameserver.enums.FenceState; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; @@ -44,7 +44,7 @@ public class FenceInstance extends WorldObject public FenceInstance(int x, int y, String name, int width, int length, int height, FenceState state) { - super(IdFactory.getNextId()); + super(IdManager.getInstance().getNextId()); _xMin = x - (width / 2); _xMax = x + (width / 2); @@ -59,7 +59,7 @@ public class FenceInstance extends WorldObject _heightFences = new int[height - 1]; for (int i = 0; i < _heightFences.length; i++) { - _heightFences[i] = IdFactory.getNextId(); + _heightFences[i] = IdManager.getInstance().getNextId(); } } } diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 72a9e2f927..1bd7bf98ca 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -105,7 +105,6 @@ import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; import org.l2jmobius.gameserver.handler.IItemHandler; import org.l2jmobius.gameserver.handler.ItemHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CursedWeaponsManager; @@ -114,6 +113,7 @@ import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.HandysBlockCheckerManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager; import org.l2jmobius.gameserver.instancemanager.MentorManager; @@ -1147,7 +1147,7 @@ public class PlayerInstance extends Playable */ private PlayerInstance(PlayerTemplate template, String accountName, PlayerAppearance app) { - this(IdFactory.getNextId(), template, accountName, app); + this(IdManager.getInstance().getNextId(), template, accountName, app); } @Override diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java index 0564bbbe5e..b493b68bcc 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java @@ -21,7 +21,7 @@ import java.util.Locale; import org.l2jmobius.Config; import org.l2jmobius.commons.util.StringUtil; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.HistoryInfo; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.RaceState; @@ -160,7 +160,7 @@ public class RaceManagerInstance extends Npc player.setRace(0, 0); player.setRace(1, 0); - ItemInstance item = new ItemInstance(IdFactory.getNextId(), 4443); + ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 4443); item.setCount(1); item.setEnchantLevel(MonsterRace.getInstance().getRaceNumber()); item.setCustomType1(ticket); diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java index 6762897720..929d68a27f 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.announce; import java.util.Date; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.script.DateRange; /** @@ -32,7 +32,7 @@ public class EventAnnouncement implements IAnnouncement public EventAnnouncement(DateRange range, String content) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _range = range; _content = content; } @@ -88,7 +88,7 @@ public class EventAnnouncement implements IAnnouncement @Override public boolean deleteMe() { - IdFactory.releaseId(_id); + IdManager.getInstance().releaseId(_id); return true; } diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/entity/Couple.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/entity/Couple.java index 6897b8d681..54104ff7ab 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/entity/Couple.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/entity/Couple.java @@ -24,7 +24,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; /** @@ -85,7 +85,7 @@ public class Couple try (Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO mods_wedding (id, player1Id, player2Id, married, affianceDate, weddingDate) VALUES (?, ?, ?, ?, ?, ?)")) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); ps.setInt(1, _id); ps.setInt(2, _player1Id); ps.setInt(3, _player2Id); diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/entity/Message.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/entity/Message.java index 1b0ebe1d93..9002ebdc1a 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/entity/Message.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/entity/Message.java @@ -24,7 +24,7 @@ import java.sql.SQLException; import org.l2jmobius.gameserver.data.sql.impl.CharNameTable; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MailManager; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -99,7 +99,7 @@ public class Message */ public Message(int senderId, int receiverId, boolean isCod, String subject, String text, long reqAdena) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -118,7 +118,7 @@ public class Message */ public Message(int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = subject; @@ -138,7 +138,7 @@ public class Message */ public Message(int senderId, int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -157,7 +157,7 @@ public class Message */ public Message(Message msg) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = msg.getSenderId(); _receiverId = msg.getSenderId(); _subject = ""; @@ -177,7 +177,7 @@ public class Message public Message(int receiverId, ItemInstance item, MailType mailType) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = ""; diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java index e1e27e6111..800fb576c7 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java @@ -17,7 +17,7 @@ package org.l2jmobius.gameserver.model.itemauction; import org.l2jmobius.gameserver.datatables.ItemTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -78,7 +78,7 @@ public class AuctionItem public ItemInstance createNewItemInstance() { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), _itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), _itemId); World.getInstance().addObject(item); item.setCount(_itemCount); item.setEnchantLevel(item.getItem().getDefaultEnchantLevel()); diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 81bb9ca1a2..e879dd11aa 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -47,8 +47,8 @@ import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemSkillType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.CastleManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.SiegeGuardManager; import org.l2jmobius.gameserver.model.DropProtection; @@ -259,7 +259,7 @@ public class ItemInstance extends WorldObject */ public ItemInstance(int itemId) { - this(IdFactory.getNextId(), itemId); + this(IdManager.getInstance().getNextId(), itemId); } /** diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java index ee2437143a..7fa54aa75e 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java @@ -16,7 +16,7 @@ */ package org.l2jmobius.gameserver.model.zone; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -50,7 +50,7 @@ public abstract class ZoneForm protected final void dropDebugItem(int itemId, int num, int x, int y, int z) { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); item.setCount(num); item.spawnMe(x, y, z + 5); ZoneManager.getInstance().getDebugItems().add(item); diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/GameServer.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/GameServer.java index 5fab875a5f..5e76ceb5d7 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/GameServer.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/GameServer.java @@ -106,7 +106,6 @@ import org.l2jmobius.gameserver.handler.ConditionHandler; import org.l2jmobius.gameserver.handler.DailyMissionHandler; import org.l2jmobius.gameserver.handler.EffectHandler; import org.l2jmobius.gameserver.handler.SkillConditionHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AirShipManager; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.BoatManager; @@ -125,6 +124,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.GraciaSeedsManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.instancemanager.ItemAuctionManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; @@ -207,9 +207,9 @@ public class GameServer printSection("ThreadPool"); ThreadPool.init(); - printSection("IdFactory"); - IdFactory.init(); - if (!IdFactory.hasInitialized()) + printSection("IdManager"); + IdManager.getInstance(); + if (!IdManager.hasInitialized()) { LOGGER.severe(getClass().getSimpleName() + ": Could not read object IDs from database. Please check your configuration."); throw new Exception("Could not initialize the ID factory!"); @@ -423,7 +423,7 @@ public class GameServer Runtime.getRuntime().addShutdownHook(Shutdown.getInstance()); - LOGGER.info("IdFactory: Free ObjectID's remaining: " + IdFactory.size()); + LOGGER.info("IdManager: Free ObjectID's remaining: " + IdManager.size()); if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS) { diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java index 21cdff27ff..6fa1579a6d 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java @@ -35,10 +35,10 @@ import org.l2jmobius.gameserver.communitybbs.Manager.ForumsBBSManager; import org.l2jmobius.gameserver.data.xml.impl.ClanHallData; import org.l2jmobius.gameserver.enums.ClanWarState; import org.l2jmobius.gameserver.enums.UserInfoType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.ClanEntryManager; import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.SiegeManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -196,7 +196,7 @@ public class ClanTable return null; } - final Clan clan = new Clan(IdFactory.getNextId(), clanName); + final Clan clan = new Clan(IdManager.getInstance().getNextId(), clanName); final ClanMember leader = new ClanMember(clan, player); clan.setLeader(leader); leader.setPlayerInstance(player); @@ -271,7 +271,7 @@ public class ClanTable } _clans.remove(clanId); - IdFactory.releaseId(clanId); + IdManager.getInstance().releaseId(clanId); try (Connection con = DatabaseFactory.getConnection()) { diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/datatables/ItemTable.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/datatables/ItemTable.java index bfae3f7a36..facda38df8 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/datatables/ItemTable.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/datatables/ItemTable.java @@ -34,7 +34,7 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.data.xml.impl.EnchantItemHPBonusData; import org.l2jmobius.gameserver.engines.DocumentEngine; import org.l2jmobius.gameserver.enums.ItemLocation; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Attackable; @@ -209,7 +209,7 @@ public class ItemTable public ItemInstance createItem(String process, int itemId, long count, Creature actor, Object reference) { // Create and Init the ItemInstance corresponding to the Item Identifier - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); if (process.equalsIgnoreCase("loot") && !Config.AUTO_LOOT_ITEM_IDS.contains(itemId)) { ScheduledFuture itemLootShedule; @@ -327,7 +327,7 @@ public class ItemTable item.setLastChange(ItemInstance.REMOVED); World.getInstance().removeObject(item); - IdFactory.releaseId(item.getObjectId()); + IdManager.getInstance().releaseId(item.getObjectId()); if (Config.LOG_ITEMS) { diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/idfactory/IdFactory.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/instancemanager/IdManager.java similarity index 79% rename from L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/idfactory/IdFactory.java rename to L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/instancemanager/IdManager.java index d4447a7dea..d595a5befa 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/idfactory/IdFactory.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/instancemanager/IdManager.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.l2jmobius.gameserver.idfactory; +package org.l2jmobius.gameserver.instancemanager; import java.sql.Connection; import java.sql.PreparedStatement; @@ -33,39 +33,12 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.util.PrimeFinder; /** - * @author Mobius (reworked from L2J version) + * @author Mobius (reworked from L2J IdFactory) */ -public abstract class IdFactory +public class IdManager { - private static final Logger LOGGER = Logger.getLogger(IdFactory.class.getName()); + private static final Logger LOGGER = Logger.getLogger(IdManager.class.getName()); - protected static final String[] ID_CHECKS = - { - "SELECT owner_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT object_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT charId FROM character_quests WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_contacts WHERE charId >= ? AND charId < ?", - "SELECT contactId FROM character_contacts WHERE contactId >= ? AND contactId < ?", - "SELECT charId FROM character_friends WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_friends WHERE friendId >= ? AND friendId < ?", - "SELECT charId FROM character_hennas WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipebook WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipeshoplist WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_shortcuts WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_macroses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills_save WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_subclasses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM characters WHERE charId >= ? AND charId < ?", - "SELECT clanid FROM characters WHERE clanid >= ? AND clanid < ?", - "SELECT clan_id FROM clan_data WHERE clan_id >= ? AND clan_id < ?", - "SELECT clan_id FROM siege_clans WHERE clan_id >= ? AND clan_id < ?", - "SELECT ally_id FROM clan_data WHERE ally_id >= ? AND ally_id < ?", - "SELECT leader_id FROM clan_data WHERE leader_id >= ? AND leader_id < ?", - "SELECT item_obj_id FROM pets WHERE item_obj_id >= ? AND item_obj_id < ?", - "SELECT object_id FROM itemsonground WHERE object_id >= ? AND object_id < ?", - "SELECT summonId FROM characters_summons WHERE summonId >= ? AND summonId < ?" - }; //@formatter:off private static final String[][] ID_EXTRACTS = { @@ -76,21 +49,23 @@ public abstract class IdFactory {"messages","messageId"} }; //@formatter:on + private static final String[] TIMESTAMPS_CLEAN = { "DELETE FROM character_instance_time WHERE time <= ?", "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" }; - public static final int FIRST_OID = 0x10000000; - public static final int LAST_OID = 0x7FFFFFFF; - public static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; + + private static final int FIRST_OID = 0x10000000; + private static final int LAST_OID = 0x7FFFFFFF; + private static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; private static BitSet _freeIds; private static AtomicInteger _freeIdCount; private static AtomicInteger _nextFreeId; private static boolean _initialized; - public static void init() + public IdManager() { // Update characters online status. try (Connection con = DatabaseFactory.getConnection(); @@ -101,7 +76,7 @@ public abstract class IdFactory } catch (Exception e) { - LOGGER.warning("IdFactory: Could not update characters online status: " + e); + LOGGER.warning("IdManager: Could not update characters online status: " + e); } // Cleanup database. @@ -182,11 +157,11 @@ public abstract class IdFactory statement.executeUpdate("UPDATE characters SET clanid=0, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0, clan_join_expiry_time=0, clan_create_expiry_time=0 WHERE characters.clanid > 0 AND characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); - LOGGER.info("IdFactory: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); + LOGGER.info("IdManager: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); } catch (Exception e) { - LOGGER.warning("IdFactory: Could not clean up database: " + e); + LOGGER.warning("IdManager: Could not clean up database: " + e); } } @@ -202,11 +177,11 @@ public abstract class IdFactory cleanCount += statement.executeUpdate(); } } - LOGGER.info("IdFactory: Cleaned " + cleanCount + " expired timestamps from database."); + LOGGER.info("IdManager: Cleaned " + cleanCount + " expired timestamps from database."); } catch (Exception e) { - LOGGER.warning("IdFactory: Could not clean expired timestamps from database. " + e); + LOGGER.warning("IdManager: Could not clean expired timestamps from database. " + e); } // Initialize. @@ -243,7 +218,7 @@ public abstract class IdFactory final int objectId = usedObjectId - FIRST_OID; if (objectId < 0) { - LOGGER.warning("IdFactory: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); + LOGGER.warning("IdManager: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); continue; } _freeIds.set(usedObjectId - FIRST_OID); @@ -256,7 +231,7 @@ public abstract class IdFactory catch (Exception e) { _initialized = false; - LOGGER.severe("IdFactory: Could not be initialized properly: " + e.getMessage()); + LOGGER.severe("IdManager: Could not be initialized properly: " + e.getMessage()); } // Schedule increase capacity task. @@ -271,10 +246,10 @@ public abstract class IdFactory } }, 30000, 30000); - LOGGER.info("IdFactory: " + _freeIds.size() + " id's available."); + LOGGER.info("IdManager: " + _freeIds.size() + " id's available."); } - public synchronized static void releaseId(int objectId) + public void releaseId(int objectId) { synchronized (_nextFreeId) { @@ -285,12 +260,12 @@ public abstract class IdFactory } else { - LOGGER.warning("IdFactory: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); + LOGGER.warning("IdManager: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); } } } - public synchronized static int getNextId() + public int getNextId() { synchronized (_nextFreeId) { @@ -303,7 +278,7 @@ public abstract class IdFactory { if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) { - throw new NullPointerException("IdFactory: Ran out of valid ids."); + throw new NullPointerException("IdManager: Ran out of valid ids."); } increaseBitSetCapacity(); } @@ -313,14 +288,14 @@ public abstract class IdFactory } } - private static void increaseBitSetCapacity() + private void increaseBitSetCapacity() { final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); newBitSet.or(_freeIds); _freeIds = newBitSet; } - private static int usedIdCount() + private int usedIdCount() { return _freeIdCount.get() - FIRST_OID; } @@ -334,4 +309,14 @@ public abstract class IdFactory { return _initialized; } + + public static IdManager getInstance() + { + return SingletonHolder.INSTANCE; + } + + private static class SingletonHolder + { + protected static final IdManager INSTANCE = new IdManager(); + } } diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/instancemanager/MailManager.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/instancemanager/MailManager.java index 176b407caa..2a82541b39 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/instancemanager/MailManager.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/instancemanager/MailManager.java @@ -31,7 +31,6 @@ import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.entity.Message; @@ -277,7 +276,7 @@ public class MailManager } _messages.remove(msgId); - IdFactory.releaseId(msgId); + IdManager.getInstance().releaseId(msgId); } /** diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/Petition.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/Petition.java index 0c1524f59b..b19b6f9025 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/Petition.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/Petition.java @@ -21,7 +21,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.PetitionState; import org.l2jmobius.gameserver.enums.PetitionType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.PetitionManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -47,7 +47,7 @@ public class Petition public Petition(PlayerInstance petitioner, String petitionText, int petitionType) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _type = PetitionType.values()[petitionType - 1]; _content = petitionText; _petitioner = petitioner; diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/WorldObject.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/WorldObject.java index 18e793a718..3b8f7fb5fb 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/WorldObject.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/WorldObject.java @@ -24,7 +24,7 @@ import org.l2jmobius.gameserver.handler.ActionHandler; import org.l2jmobius.gameserver.handler.ActionShiftHandler; import org.l2jmobius.gameserver.handler.IActionHandler; import org.l2jmobius.gameserver.handler.IActionShiftHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; @@ -154,8 +154,8 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif public void refreshId() { World.getInstance().removeObject(this); - IdFactory.releaseId(getObjectId()); - _objectId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(getObjectId()); + _objectId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Creature.java index e25daeb242..c17a081f55 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -63,7 +63,7 @@ import org.l2jmobius.gameserver.enums.Team; import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MapRegionManager; import org.l2jmobius.gameserver.instancemanager.QuestManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; @@ -288,7 +288,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public Creature(CreatureTemplate template) { - this(IdFactory.getNextId(), template); + this(IdManager.getInstance().getNextId(), template); } /** diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java index d132ad18fc..12209da801 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java @@ -20,7 +20,7 @@ import java.util.concurrent.Future; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.gameserver.enums.InstanceType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.stat.ControllableAirShipStat; import org.l2jmobius.gameserver.model.actor.templates.CreatureTemplate; import org.l2jmobius.gameserver.model.skills.AbnormalType; @@ -48,7 +48,7 @@ public class ControllableAirShipInstance extends AirShipInstance super(template); setInstanceType(InstanceType.ControllableAirShipInstance); _ownerId = ownerId; - _helmId = IdFactory.getNextId(); // not forget to release ! + _helmId = IdManager.getInstance().getNextId(); // not forget to release ! } @Override @@ -282,8 +282,8 @@ public class ControllableAirShipInstance extends AirShipInstance public void refreshId() { super.refreshId(); - IdFactory.releaseId(_helmId); - _helmId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(_helmId); + _helmId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java index 48c52c920f..c8412e68be 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.actor.instance; import org.l2jmobius.gameserver.data.xml.impl.FenceData; import org.l2jmobius.gameserver.enums.FenceState; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; @@ -44,7 +44,7 @@ public class FenceInstance extends WorldObject public FenceInstance(int x, int y, String name, int width, int length, int height, FenceState state) { - super(IdFactory.getNextId()); + super(IdManager.getInstance().getNextId()); _xMin = x - (width / 2); _xMax = x + (width / 2); @@ -59,7 +59,7 @@ public class FenceInstance extends WorldObject _heightFences = new int[height - 1]; for (int i = 0; i < _heightFences.length; i++) { - _heightFences[i] = IdFactory.getNextId(); + _heightFences[i] = IdManager.getInstance().getNextId(); } } } diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 45612a4e00..36df23588f 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -106,7 +106,6 @@ import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; import org.l2jmobius.gameserver.handler.IItemHandler; import org.l2jmobius.gameserver.handler.ItemHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CursedWeaponsManager; @@ -115,6 +114,7 @@ import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.HandysBlockCheckerManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager; import org.l2jmobius.gameserver.instancemanager.MentorManager; @@ -1149,7 +1149,7 @@ public class PlayerInstance extends Playable */ private PlayerInstance(PlayerTemplate template, String accountName, PlayerAppearance app) { - this(IdFactory.getNextId(), template, accountName, app); + this(IdManager.getInstance().getNextId(), template, accountName, app); } @Override diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java index 0564bbbe5e..b493b68bcc 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java @@ -21,7 +21,7 @@ import java.util.Locale; import org.l2jmobius.Config; import org.l2jmobius.commons.util.StringUtil; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.HistoryInfo; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.RaceState; @@ -160,7 +160,7 @@ public class RaceManagerInstance extends Npc player.setRace(0, 0); player.setRace(1, 0); - ItemInstance item = new ItemInstance(IdFactory.getNextId(), 4443); + ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 4443); item.setCount(1); item.setEnchantLevel(MonsterRace.getInstance().getRaceNumber()); item.setCustomType1(ticket); diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java index 6762897720..929d68a27f 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.announce; import java.util.Date; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.script.DateRange; /** @@ -32,7 +32,7 @@ public class EventAnnouncement implements IAnnouncement public EventAnnouncement(DateRange range, String content) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _range = range; _content = content; } @@ -88,7 +88,7 @@ public class EventAnnouncement implements IAnnouncement @Override public boolean deleteMe() { - IdFactory.releaseId(_id); + IdManager.getInstance().releaseId(_id); return true; } diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/entity/Couple.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/entity/Couple.java index 6897b8d681..54104ff7ab 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/entity/Couple.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/entity/Couple.java @@ -24,7 +24,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; /** @@ -85,7 +85,7 @@ public class Couple try (Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO mods_wedding (id, player1Id, player2Id, married, affianceDate, weddingDate) VALUES (?, ?, ?, ?, ?, ?)")) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); ps.setInt(1, _id); ps.setInt(2, _player1Id); ps.setInt(3, _player2Id); diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/entity/Message.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/entity/Message.java index 1b0ebe1d93..9002ebdc1a 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/entity/Message.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/entity/Message.java @@ -24,7 +24,7 @@ import java.sql.SQLException; import org.l2jmobius.gameserver.data.sql.impl.CharNameTable; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MailManager; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -99,7 +99,7 @@ public class Message */ public Message(int senderId, int receiverId, boolean isCod, String subject, String text, long reqAdena) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -118,7 +118,7 @@ public class Message */ public Message(int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = subject; @@ -138,7 +138,7 @@ public class Message */ public Message(int senderId, int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -157,7 +157,7 @@ public class Message */ public Message(Message msg) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = msg.getSenderId(); _receiverId = msg.getSenderId(); _subject = ""; @@ -177,7 +177,7 @@ public class Message public Message(int receiverId, ItemInstance item, MailType mailType) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = ""; diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java index e1e27e6111..800fb576c7 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java @@ -17,7 +17,7 @@ package org.l2jmobius.gameserver.model.itemauction; import org.l2jmobius.gameserver.datatables.ItemTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -78,7 +78,7 @@ public class AuctionItem public ItemInstance createNewItemInstance() { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), _itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), _itemId); World.getInstance().addObject(item); item.setCount(_itemCount); item.setEnchantLevel(item.getItem().getDefaultEnchantLevel()); diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 81bb9ca1a2..e879dd11aa 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -47,8 +47,8 @@ import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemSkillType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.CastleManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.SiegeGuardManager; import org.l2jmobius.gameserver.model.DropProtection; @@ -259,7 +259,7 @@ public class ItemInstance extends WorldObject */ public ItemInstance(int itemId) { - this(IdFactory.getNextId(), itemId); + this(IdManager.getInstance().getNextId(), itemId); } /** diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java index ee2437143a..7fa54aa75e 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java @@ -16,7 +16,7 @@ */ package org.l2jmobius.gameserver.model.zone; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -50,7 +50,7 @@ public abstract class ZoneForm protected final void dropDebugItem(int itemId, int num, int x, int y, int z) { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); item.setCount(num); item.spawnMe(x, y, z + 5); ZoneManager.getInstance().getDebugItems().add(item); diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/GameServer.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/GameServer.java index ef3a35568a..609a18a6a3 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/GameServer.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/GameServer.java @@ -106,7 +106,6 @@ import org.l2jmobius.gameserver.handler.ConditionHandler; import org.l2jmobius.gameserver.handler.DailyMissionHandler; import org.l2jmobius.gameserver.handler.EffectHandler; import org.l2jmobius.gameserver.handler.SkillConditionHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AirShipManager; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.BoatManager; @@ -125,6 +124,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.GraciaSeedsManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.instancemanager.ItemAuctionManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; @@ -207,9 +207,9 @@ public class GameServer printSection("ThreadPool"); ThreadPool.init(); - printSection("IdFactory"); - IdFactory.init(); - if (!IdFactory.hasInitialized()) + printSection("IdManager"); + IdManager.getInstance(); + if (!IdManager.hasInitialized()) { LOGGER.severe(getClass().getSimpleName() + ": Could not read object IDs from database. Please check your configuration."); throw new Exception("Could not initialize the ID factory!"); @@ -423,7 +423,7 @@ public class GameServer Runtime.getRuntime().addShutdownHook(Shutdown.getInstance()); - LOGGER.info("IdFactory: Free ObjectID's remaining: " + IdFactory.size()); + LOGGER.info("IdManager: Free ObjectID's remaining: " + IdManager.size()); if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS) { diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java index 0929ab7f5f..f80750ae97 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java @@ -35,10 +35,10 @@ import org.l2jmobius.gameserver.communitybbs.Manager.ForumsBBSManager; import org.l2jmobius.gameserver.data.xml.impl.ClanHallData; import org.l2jmobius.gameserver.enums.ClanWarState; import org.l2jmobius.gameserver.enums.UserInfoType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.ClanEntryManager; import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.SiegeManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -196,7 +196,7 @@ public class ClanTable return null; } - final Clan clan = new Clan(IdFactory.getNextId(), clanName); + final Clan clan = new Clan(IdManager.getInstance().getNextId(), clanName); final ClanMember leader = new ClanMember(clan, player); clan.setLeader(leader); leader.setPlayerInstance(player); @@ -271,7 +271,7 @@ public class ClanTable } _clans.remove(clanId); - IdFactory.releaseId(clanId); + IdManager.getInstance().releaseId(clanId); try (Connection con = DatabaseFactory.getConnection()) { diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/datatables/ItemTable.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/datatables/ItemTable.java index bfae3f7a36..facda38df8 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/datatables/ItemTable.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/datatables/ItemTable.java @@ -34,7 +34,7 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.data.xml.impl.EnchantItemHPBonusData; import org.l2jmobius.gameserver.engines.DocumentEngine; import org.l2jmobius.gameserver.enums.ItemLocation; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Attackable; @@ -209,7 +209,7 @@ public class ItemTable public ItemInstance createItem(String process, int itemId, long count, Creature actor, Object reference) { // Create and Init the ItemInstance corresponding to the Item Identifier - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); if (process.equalsIgnoreCase("loot") && !Config.AUTO_LOOT_ITEM_IDS.contains(itemId)) { ScheduledFuture itemLootShedule; @@ -327,7 +327,7 @@ public class ItemTable item.setLastChange(ItemInstance.REMOVED); World.getInstance().removeObject(item); - IdFactory.releaseId(item.getObjectId()); + IdManager.getInstance().releaseId(item.getObjectId()); if (Config.LOG_ITEMS) { diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/idfactory/IdFactory.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/instancemanager/IdManager.java similarity index 79% rename from L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/idfactory/IdFactory.java rename to L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/instancemanager/IdManager.java index d4447a7dea..d595a5befa 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/idfactory/IdFactory.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/instancemanager/IdManager.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.l2jmobius.gameserver.idfactory; +package org.l2jmobius.gameserver.instancemanager; import java.sql.Connection; import java.sql.PreparedStatement; @@ -33,39 +33,12 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.util.PrimeFinder; /** - * @author Mobius (reworked from L2J version) + * @author Mobius (reworked from L2J IdFactory) */ -public abstract class IdFactory +public class IdManager { - private static final Logger LOGGER = Logger.getLogger(IdFactory.class.getName()); + private static final Logger LOGGER = Logger.getLogger(IdManager.class.getName()); - protected static final String[] ID_CHECKS = - { - "SELECT owner_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT object_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT charId FROM character_quests WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_contacts WHERE charId >= ? AND charId < ?", - "SELECT contactId FROM character_contacts WHERE contactId >= ? AND contactId < ?", - "SELECT charId FROM character_friends WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_friends WHERE friendId >= ? AND friendId < ?", - "SELECT charId FROM character_hennas WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipebook WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipeshoplist WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_shortcuts WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_macroses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills_save WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_subclasses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM characters WHERE charId >= ? AND charId < ?", - "SELECT clanid FROM characters WHERE clanid >= ? AND clanid < ?", - "SELECT clan_id FROM clan_data WHERE clan_id >= ? AND clan_id < ?", - "SELECT clan_id FROM siege_clans WHERE clan_id >= ? AND clan_id < ?", - "SELECT ally_id FROM clan_data WHERE ally_id >= ? AND ally_id < ?", - "SELECT leader_id FROM clan_data WHERE leader_id >= ? AND leader_id < ?", - "SELECT item_obj_id FROM pets WHERE item_obj_id >= ? AND item_obj_id < ?", - "SELECT object_id FROM itemsonground WHERE object_id >= ? AND object_id < ?", - "SELECT summonId FROM characters_summons WHERE summonId >= ? AND summonId < ?" - }; //@formatter:off private static final String[][] ID_EXTRACTS = { @@ -76,21 +49,23 @@ public abstract class IdFactory {"messages","messageId"} }; //@formatter:on + private static final String[] TIMESTAMPS_CLEAN = { "DELETE FROM character_instance_time WHERE time <= ?", "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" }; - public static final int FIRST_OID = 0x10000000; - public static final int LAST_OID = 0x7FFFFFFF; - public static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; + + private static final int FIRST_OID = 0x10000000; + private static final int LAST_OID = 0x7FFFFFFF; + private static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; private static BitSet _freeIds; private static AtomicInteger _freeIdCount; private static AtomicInteger _nextFreeId; private static boolean _initialized; - public static void init() + public IdManager() { // Update characters online status. try (Connection con = DatabaseFactory.getConnection(); @@ -101,7 +76,7 @@ public abstract class IdFactory } catch (Exception e) { - LOGGER.warning("IdFactory: Could not update characters online status: " + e); + LOGGER.warning("IdManager: Could not update characters online status: " + e); } // Cleanup database. @@ -182,11 +157,11 @@ public abstract class IdFactory statement.executeUpdate("UPDATE characters SET clanid=0, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0, clan_join_expiry_time=0, clan_create_expiry_time=0 WHERE characters.clanid > 0 AND characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); - LOGGER.info("IdFactory: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); + LOGGER.info("IdManager: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); } catch (Exception e) { - LOGGER.warning("IdFactory: Could not clean up database: " + e); + LOGGER.warning("IdManager: Could not clean up database: " + e); } } @@ -202,11 +177,11 @@ public abstract class IdFactory cleanCount += statement.executeUpdate(); } } - LOGGER.info("IdFactory: Cleaned " + cleanCount + " expired timestamps from database."); + LOGGER.info("IdManager: Cleaned " + cleanCount + " expired timestamps from database."); } catch (Exception e) { - LOGGER.warning("IdFactory: Could not clean expired timestamps from database. " + e); + LOGGER.warning("IdManager: Could not clean expired timestamps from database. " + e); } // Initialize. @@ -243,7 +218,7 @@ public abstract class IdFactory final int objectId = usedObjectId - FIRST_OID; if (objectId < 0) { - LOGGER.warning("IdFactory: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); + LOGGER.warning("IdManager: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); continue; } _freeIds.set(usedObjectId - FIRST_OID); @@ -256,7 +231,7 @@ public abstract class IdFactory catch (Exception e) { _initialized = false; - LOGGER.severe("IdFactory: Could not be initialized properly: " + e.getMessage()); + LOGGER.severe("IdManager: Could not be initialized properly: " + e.getMessage()); } // Schedule increase capacity task. @@ -271,10 +246,10 @@ public abstract class IdFactory } }, 30000, 30000); - LOGGER.info("IdFactory: " + _freeIds.size() + " id's available."); + LOGGER.info("IdManager: " + _freeIds.size() + " id's available."); } - public synchronized static void releaseId(int objectId) + public void releaseId(int objectId) { synchronized (_nextFreeId) { @@ -285,12 +260,12 @@ public abstract class IdFactory } else { - LOGGER.warning("IdFactory: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); + LOGGER.warning("IdManager: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); } } } - public synchronized static int getNextId() + public int getNextId() { synchronized (_nextFreeId) { @@ -303,7 +278,7 @@ public abstract class IdFactory { if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) { - throw new NullPointerException("IdFactory: Ran out of valid ids."); + throw new NullPointerException("IdManager: Ran out of valid ids."); } increaseBitSetCapacity(); } @@ -313,14 +288,14 @@ public abstract class IdFactory } } - private static void increaseBitSetCapacity() + private void increaseBitSetCapacity() { final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); newBitSet.or(_freeIds); _freeIds = newBitSet; } - private static int usedIdCount() + private int usedIdCount() { return _freeIdCount.get() - FIRST_OID; } @@ -334,4 +309,14 @@ public abstract class IdFactory { return _initialized; } + + public static IdManager getInstance() + { + return SingletonHolder.INSTANCE; + } + + private static class SingletonHolder + { + protected static final IdManager INSTANCE = new IdManager(); + } } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/instancemanager/MailManager.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/instancemanager/MailManager.java index 176b407caa..2a82541b39 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/instancemanager/MailManager.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/instancemanager/MailManager.java @@ -31,7 +31,6 @@ import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.entity.Message; @@ -277,7 +276,7 @@ public class MailManager } _messages.remove(msgId); - IdFactory.releaseId(msgId); + IdManager.getInstance().releaseId(msgId); } /** diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/Petition.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/Petition.java index 0c1524f59b..b19b6f9025 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/Petition.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/Petition.java @@ -21,7 +21,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.PetitionState; import org.l2jmobius.gameserver.enums.PetitionType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.PetitionManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -47,7 +47,7 @@ public class Petition public Petition(PlayerInstance petitioner, String petitionText, int petitionType) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _type = PetitionType.values()[petitionType - 1]; _content = petitionText; _petitioner = petitioner; diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/WorldObject.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/WorldObject.java index 18e793a718..3b8f7fb5fb 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/WorldObject.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/WorldObject.java @@ -24,7 +24,7 @@ import org.l2jmobius.gameserver.handler.ActionHandler; import org.l2jmobius.gameserver.handler.ActionShiftHandler; import org.l2jmobius.gameserver.handler.IActionHandler; import org.l2jmobius.gameserver.handler.IActionShiftHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; @@ -154,8 +154,8 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif public void refreshId() { World.getInstance().removeObject(this); - IdFactory.releaseId(getObjectId()); - _objectId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(getObjectId()); + _objectId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Creature.java index e25daeb242..c17a081f55 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -63,7 +63,7 @@ import org.l2jmobius.gameserver.enums.Team; import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MapRegionManager; import org.l2jmobius.gameserver.instancemanager.QuestManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; @@ -288,7 +288,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public Creature(CreatureTemplate template) { - this(IdFactory.getNextId(), template); + this(IdManager.getInstance().getNextId(), template); } /** diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java index d132ad18fc..12209da801 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java @@ -20,7 +20,7 @@ import java.util.concurrent.Future; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.gameserver.enums.InstanceType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.stat.ControllableAirShipStat; import org.l2jmobius.gameserver.model.actor.templates.CreatureTemplate; import org.l2jmobius.gameserver.model.skills.AbnormalType; @@ -48,7 +48,7 @@ public class ControllableAirShipInstance extends AirShipInstance super(template); setInstanceType(InstanceType.ControllableAirShipInstance); _ownerId = ownerId; - _helmId = IdFactory.getNextId(); // not forget to release ! + _helmId = IdManager.getInstance().getNextId(); // not forget to release ! } @Override @@ -282,8 +282,8 @@ public class ControllableAirShipInstance extends AirShipInstance public void refreshId() { super.refreshId(); - IdFactory.releaseId(_helmId); - _helmId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(_helmId); + _helmId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java index 48c52c920f..c8412e68be 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.actor.instance; import org.l2jmobius.gameserver.data.xml.impl.FenceData; import org.l2jmobius.gameserver.enums.FenceState; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; @@ -44,7 +44,7 @@ public class FenceInstance extends WorldObject public FenceInstance(int x, int y, String name, int width, int length, int height, FenceState state) { - super(IdFactory.getNextId()); + super(IdManager.getInstance().getNextId()); _xMin = x - (width / 2); _xMax = x + (width / 2); @@ -59,7 +59,7 @@ public class FenceInstance extends WorldObject _heightFences = new int[height - 1]; for (int i = 0; i < _heightFences.length; i++) { - _heightFences[i] = IdFactory.getNextId(); + _heightFences[i] = IdManager.getInstance().getNextId(); } } } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index ec06545d3c..2427f88b7b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -107,7 +107,6 @@ import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; import org.l2jmobius.gameserver.handler.IItemHandler; import org.l2jmobius.gameserver.handler.ItemHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CursedWeaponsManager; @@ -116,6 +115,7 @@ import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.HandysBlockCheckerManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager; import org.l2jmobius.gameserver.instancemanager.MentorManager; @@ -1159,7 +1159,7 @@ public class PlayerInstance extends Playable */ private PlayerInstance(PlayerTemplate template, String accountName, PlayerAppearance app) { - this(IdFactory.getNextId(), template, accountName, app); + this(IdManager.getInstance().getNextId(), template, accountName, app); } @Override diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java index 0564bbbe5e..b493b68bcc 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java @@ -21,7 +21,7 @@ import java.util.Locale; import org.l2jmobius.Config; import org.l2jmobius.commons.util.StringUtil; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.HistoryInfo; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.RaceState; @@ -160,7 +160,7 @@ public class RaceManagerInstance extends Npc player.setRace(0, 0); player.setRace(1, 0); - ItemInstance item = new ItemInstance(IdFactory.getNextId(), 4443); + ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 4443); item.setCount(1); item.setEnchantLevel(MonsterRace.getInstance().getRaceNumber()); item.setCustomType1(ticket); diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java index 6762897720..929d68a27f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.announce; import java.util.Date; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.script.DateRange; /** @@ -32,7 +32,7 @@ public class EventAnnouncement implements IAnnouncement public EventAnnouncement(DateRange range, String content) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _range = range; _content = content; } @@ -88,7 +88,7 @@ public class EventAnnouncement implements IAnnouncement @Override public boolean deleteMe() { - IdFactory.releaseId(_id); + IdManager.getInstance().releaseId(_id); return true; } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/entity/Couple.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/entity/Couple.java index 6897b8d681..54104ff7ab 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/entity/Couple.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/entity/Couple.java @@ -24,7 +24,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; /** @@ -85,7 +85,7 @@ public class Couple try (Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO mods_wedding (id, player1Id, player2Id, married, affianceDate, weddingDate) VALUES (?, ?, ?, ?, ?, ?)")) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); ps.setInt(1, _id); ps.setInt(2, _player1Id); ps.setInt(3, _player2Id); diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/entity/Message.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/entity/Message.java index 1b0ebe1d93..9002ebdc1a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/entity/Message.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/entity/Message.java @@ -24,7 +24,7 @@ import java.sql.SQLException; import org.l2jmobius.gameserver.data.sql.impl.CharNameTable; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MailManager; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -99,7 +99,7 @@ public class Message */ public Message(int senderId, int receiverId, boolean isCod, String subject, String text, long reqAdena) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -118,7 +118,7 @@ public class Message */ public Message(int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = subject; @@ -138,7 +138,7 @@ public class Message */ public Message(int senderId, int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -157,7 +157,7 @@ public class Message */ public Message(Message msg) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = msg.getSenderId(); _receiverId = msg.getSenderId(); _subject = ""; @@ -177,7 +177,7 @@ public class Message public Message(int receiverId, ItemInstance item, MailType mailType) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = ""; diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java index e1e27e6111..800fb576c7 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java @@ -17,7 +17,7 @@ package org.l2jmobius.gameserver.model.itemauction; import org.l2jmobius.gameserver.datatables.ItemTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -78,7 +78,7 @@ public class AuctionItem public ItemInstance createNewItemInstance() { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), _itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), _itemId); World.getInstance().addObject(item); item.setCount(_itemCount); item.setEnchantLevel(item.getItem().getDefaultEnchantLevel()); diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 6be9d17c56..77118581aa 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -47,8 +47,8 @@ import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemSkillType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.CastleManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.SiegeGuardManager; import org.l2jmobius.gameserver.model.DropProtection; @@ -259,7 +259,7 @@ public class ItemInstance extends WorldObject */ public ItemInstance(int itemId) { - this(IdFactory.getNextId(), itemId); + this(IdManager.getInstance().getNextId(), itemId); } /** diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java index ee2437143a..7fa54aa75e 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java @@ -16,7 +16,7 @@ */ package org.l2jmobius.gameserver.model.zone; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -50,7 +50,7 @@ public abstract class ZoneForm protected final void dropDebugItem(int itemId, int num, int x, int y, int z) { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); item.setCount(num); item.spawnMe(x, y, z + 5); ZoneManager.getInstance().getDebugItems().add(item); diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/GameServer.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/GameServer.java index fe6f164da2..2d63e65300 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/GameServer.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/GameServer.java @@ -107,7 +107,6 @@ import org.l2jmobius.gameserver.handler.ConditionHandler; import org.l2jmobius.gameserver.handler.DailyMissionHandler; import org.l2jmobius.gameserver.handler.EffectHandler; import org.l2jmobius.gameserver.handler.SkillConditionHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AirShipManager; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.BoatManager; @@ -126,6 +125,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.GraciaSeedsManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.instancemanager.ItemAuctionManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; @@ -208,9 +208,9 @@ public class GameServer printSection("ThreadPool"); ThreadPool.init(); - printSection("IdFactory"); - IdFactory.init(); - if (!IdFactory.hasInitialized()) + printSection("IdManager"); + IdManager.getInstance(); + if (!IdManager.hasInitialized()) { LOGGER.severe(getClass().getSimpleName() + ": Could not read object IDs from database. Please check your configuration."); throw new Exception("Could not initialize the ID factory!"); @@ -425,7 +425,7 @@ public class GameServer Runtime.getRuntime().addShutdownHook(Shutdown.getInstance()); - LOGGER.info("IdFactory: Free ObjectID's remaining: " + IdFactory.size()); + LOGGER.info("IdManager: Free ObjectID's remaining: " + IdManager.size()); if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS) { diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java index 0929ab7f5f..f80750ae97 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java @@ -35,10 +35,10 @@ import org.l2jmobius.gameserver.communitybbs.Manager.ForumsBBSManager; import org.l2jmobius.gameserver.data.xml.impl.ClanHallData; import org.l2jmobius.gameserver.enums.ClanWarState; import org.l2jmobius.gameserver.enums.UserInfoType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.ClanEntryManager; import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.SiegeManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -196,7 +196,7 @@ public class ClanTable return null; } - final Clan clan = new Clan(IdFactory.getNextId(), clanName); + final Clan clan = new Clan(IdManager.getInstance().getNextId(), clanName); final ClanMember leader = new ClanMember(clan, player); clan.setLeader(leader); leader.setPlayerInstance(player); @@ -271,7 +271,7 @@ public class ClanTable } _clans.remove(clanId); - IdFactory.releaseId(clanId); + IdManager.getInstance().releaseId(clanId); try (Connection con = DatabaseFactory.getConnection()) { diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/datatables/ItemTable.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/datatables/ItemTable.java index 319c8546fd..c3919e9365 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/datatables/ItemTable.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/datatables/ItemTable.java @@ -34,7 +34,7 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.data.xml.impl.EnchantItemHPBonusData; import org.l2jmobius.gameserver.engines.DocumentEngine; import org.l2jmobius.gameserver.enums.ItemLocation; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Attackable; @@ -210,7 +210,7 @@ public class ItemTable public ItemInstance createItem(String process, int itemId, long count, Creature actor, Object reference) { // Create and Init the ItemInstance corresponding to the Item Identifier - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); if (process.equalsIgnoreCase("loot") && !Config.AUTO_LOOT_ITEM_IDS.contains(itemId)) { ScheduledFuture itemLootShedule; @@ -328,7 +328,7 @@ public class ItemTable item.setLastChange(ItemInstance.REMOVED); World.getInstance().removeObject(item); - IdFactory.releaseId(item.getObjectId()); + IdManager.getInstance().releaseId(item.getObjectId()); if (Config.LOG_ITEMS) { diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/idfactory/IdFactory.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/idfactory/IdFactory.java deleted file mode 100644 index d4447a7dea..0000000000 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/idfactory/IdFactory.java +++ /dev/null @@ -1,337 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.l2jmobius.gameserver.idfactory; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.BitSet; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.logging.Logger; - -import org.l2jmobius.Config; -import org.l2jmobius.commons.concurrent.ThreadPool; -import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.util.PrimeFinder; - -/** - * @author Mobius (reworked from L2J version) - */ -public abstract class IdFactory -{ - private static final Logger LOGGER = Logger.getLogger(IdFactory.class.getName()); - - protected static final String[] ID_CHECKS = - { - "SELECT owner_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT object_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT charId FROM character_quests WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_contacts WHERE charId >= ? AND charId < ?", - "SELECT contactId FROM character_contacts WHERE contactId >= ? AND contactId < ?", - "SELECT charId FROM character_friends WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_friends WHERE friendId >= ? AND friendId < ?", - "SELECT charId FROM character_hennas WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipebook WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipeshoplist WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_shortcuts WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_macroses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills_save WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_subclasses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM characters WHERE charId >= ? AND charId < ?", - "SELECT clanid FROM characters WHERE clanid >= ? AND clanid < ?", - "SELECT clan_id FROM clan_data WHERE clan_id >= ? AND clan_id < ?", - "SELECT clan_id FROM siege_clans WHERE clan_id >= ? AND clan_id < ?", - "SELECT ally_id FROM clan_data WHERE ally_id >= ? AND ally_id < ?", - "SELECT leader_id FROM clan_data WHERE leader_id >= ? AND leader_id < ?", - "SELECT item_obj_id FROM pets WHERE item_obj_id >= ? AND item_obj_id < ?", - "SELECT object_id FROM itemsonground WHERE object_id >= ? AND object_id < ?", - "SELECT summonId FROM characters_summons WHERE summonId >= ? AND summonId < ?" - }; - //@formatter:off - private static final String[][] ID_EXTRACTS = - { - {"characters","charId"}, - {"items","object_id"}, - {"clan_data","clan_id"}, - {"itemsonground","object_id"}, - {"messages","messageId"} - }; - //@formatter:on - private static final String[] TIMESTAMPS_CLEAN = - { - "DELETE FROM character_instance_time WHERE time <= ?", - "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" - }; - public static final int FIRST_OID = 0x10000000; - public static final int LAST_OID = 0x7FFFFFFF; - public static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; - - private static BitSet _freeIds; - private static AtomicInteger _freeIdCount; - private static AtomicInteger _nextFreeId; - private static boolean _initialized; - - public static void init() - { - // Update characters online status. - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - statement.executeUpdate("UPDATE characters SET online = 0"); - LOGGER.info("Updated characters online status."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not update characters online status: " + e); - } - - // Cleanup database. - if (Config.DATABASE_CLEAN_UP) - { - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - final long cleanupStart = System.currentTimeMillis(); - int cleanCount = 0; - - // Characters - cleanCount += statement.executeUpdate("DELETE FROM account_gsdata WHERE account_gsdata.account_name NOT IN (SELECT account_name FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.contactId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.friendId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_hennas WHERE character_hennas.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_macroses WHERE character_macroses.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_quests WHERE character_quests.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_recipebook WHERE character_recipebook.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_recipeshoplist WHERE character_recipeshoplist.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_shortcuts WHERE character_shortcuts.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_skills WHERE character_skills.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_skills_save WHERE character_skills_save.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_subclasses WHERE character_subclasses.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_instance_time WHERE character_instance_time.charId NOT IN (SELECT charId FROM characters);"); - - // Items - cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id NOT IN (SELECT charId FROM characters) AND items.owner_id NOT IN (SELECT clan_id FROM clan_data) AND items.owner_id != -1;"); - cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id = -1 AND loc LIKE 'MAIL' AND loc_data NOT IN (SELECT messageId FROM messages WHERE senderId = -1);"); - cleanCount += statement.executeUpdate("DELETE FROM item_auction_bid WHERE item_auction_bid.playerObjId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM item_variations WHERE item_variations.itemId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_elementals WHERE item_elementals.itemId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_special_abilities WHERE item_special_abilities.objectId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_variables WHERE item_variables.id NOT IN (SELECT object_id FROM items);"); - - // Misc - cleanCount += statement.executeUpdate("DELETE FROM cursed_weapons WHERE cursed_weapons.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM heroes WHERE heroes.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles WHERE olympiad_nobles.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles_eom WHERE olympiad_nobles_eom.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM pets WHERE pets.item_obj_id NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM merchant_lease WHERE merchant_lease.player_id NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_reco_bonus WHERE character_reco_bonus.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.leader_id NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.clan_id NOT IN (SELECT clanid FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charOneId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charTwoId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM heroes_diary WHERE heroes_diary.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade WHERE character_offline_trade.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade_items WHERE character_offline_trade_items.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_tpbookmark WHERE character_tpbookmark.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_variables WHERE character_variables.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM bot_reported_char_data WHERE bot_reported_char_data.botId NOT IN (SELECT charId FROM characters);"); - - // Clan - cleanCount += statement.executeUpdate("DELETE FROM clan_privs WHERE clan_privs.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_skills WHERE clan_skills.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_subpledges WHERE clan_subpledges.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan1 NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan2 NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM siege_clans WHERE siege_clans.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_notices WHERE clan_notices.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM auction_bid WHERE auction_bid.bidderId NOT IN (SELECT clan_id FROM clan_data);"); - - // Forums - cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT clan_id FROM clan_data) AND forums.forum_parent=2;"); - cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT charId FROM characters) AND forums.forum_parent=3;"); - cleanCount += statement.executeUpdate("DELETE FROM posts WHERE posts.post_forum_id NOT IN (SELECT forum_id FROM forums);"); - cleanCount += statement.executeUpdate("DELETE FROM topic WHERE topic.topic_forum_id NOT IN (SELECT forum_id FROM forums);"); - - // Update needed items after cleaning has taken place. - statement.executeUpdate("UPDATE clan_data SET auction_bid_at = 0 WHERE auction_bid_at NOT IN (SELECT auctionId FROM auction_bid);"); - statement.executeUpdate("UPDATE clan_data SET new_leader_id = 0 WHERE new_leader_id <> 0 AND new_leader_id NOT IN (SELECT charId FROM characters);"); - statement.executeUpdate("UPDATE clan_subpledges SET leader_id=0 WHERE clan_subpledges.leader_id NOT IN (SELECT charId FROM characters) AND leader_id > 0;"); - statement.executeUpdate("UPDATE castle SET side='NEUTRAL' WHERE castle.id NOT IN (SELECT hasCastle FROM clan_data);"); - statement.executeUpdate("UPDATE characters SET clanid=0, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0, clan_join_expiry_time=0, clan_create_expiry_time=0 WHERE characters.clanid > 0 AND characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); - statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); - - LOGGER.info("IdFactory: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not clean up database: " + e); - } - } - - // Cleanup timestamps. - try (Connection con = DatabaseFactory.getConnection()) - { - int cleanCount = 0; - for (String line : TIMESTAMPS_CLEAN) - { - try (PreparedStatement statement = con.prepareStatement(line)) - { - statement.setLong(1, System.currentTimeMillis()); - cleanCount += statement.executeUpdate(); - } - } - LOGGER.info("IdFactory: Cleaned " + cleanCount + " expired timestamps from database."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not clean expired timestamps from database. " + e); - } - - // Initialize. - try - { - _freeIds = new BitSet(PrimeFinder.nextPrime(100000)); - _freeIds.clear(); - _freeIdCount = new AtomicInteger(FREE_OBJECT_ID_SIZE); - - // Collect already used ids. - final List usedIds = new ArrayList<>(); - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - String extractUsedObjectIdsQuery = ""; - for (String[] tblClmn : ID_EXTRACTS) - { - extractUsedObjectIdsQuery += "SELECT " + tblClmn[1] + " FROM " + tblClmn[0] + " UNION "; - } - extractUsedObjectIdsQuery = extractUsedObjectIdsQuery.substring(0, extractUsedObjectIdsQuery.length() - 7); // Remove the last " UNION " - try (ResultSet result = statement.executeQuery(extractUsedObjectIdsQuery)) - { - while (result.next()) - { - usedIds.add(result.getInt(1)); - } - } - } - Collections.sort(usedIds); - - // Register used ids. - for (int usedObjectId : usedIds) - { - final int objectId = usedObjectId - FIRST_OID; - if (objectId < 0) - { - LOGGER.warning("IdFactory: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); - continue; - } - _freeIds.set(usedObjectId - FIRST_OID); - _freeIdCount.decrementAndGet(); - } - - _nextFreeId = new AtomicInteger(_freeIds.nextClearBit(0)); - _initialized = true; - } - catch (Exception e) - { - _initialized = false; - LOGGER.severe("IdFactory: Could not be initialized properly: " + e.getMessage()); - } - - // Schedule increase capacity task. - ThreadPool.scheduleAtFixedRate(() -> - { - synchronized (_nextFreeId) - { - if (PrimeFinder.nextPrime((usedIdCount() * 11) / 10) > _freeIds.size()) - { - increaseBitSetCapacity(); - } - } - }, 30000, 30000); - - LOGGER.info("IdFactory: " + _freeIds.size() + " id's available."); - } - - public synchronized static void releaseId(int objectId) - { - synchronized (_nextFreeId) - { - if ((objectId - FIRST_OID) > -1) - { - _freeIds.clear(objectId - FIRST_OID); - _freeIdCount.incrementAndGet(); - } - else - { - LOGGER.warning("IdFactory: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); - } - } - } - - public synchronized static int getNextId() - { - synchronized (_nextFreeId) - { - final int newId = _nextFreeId.get(); - _freeIds.set(newId); - _freeIdCount.decrementAndGet(); - - final int nextFree = _freeIds.nextClearBit(newId) < 0 ? _freeIds.nextClearBit(0) : _freeIds.nextClearBit(newId); - if (nextFree < 0) - { - if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) - { - throw new NullPointerException("IdFactory: Ran out of valid ids."); - } - increaseBitSetCapacity(); - } - _nextFreeId.set(nextFree); - - return newId + FIRST_OID; - } - } - - private static void increaseBitSetCapacity() - { - final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); - newBitSet.or(_freeIds); - _freeIds = newBitSet; - } - - private static int usedIdCount() - { - return _freeIdCount.get() - FIRST_OID; - } - - public static int size() - { - return _freeIdCount.get(); - } - - public static boolean hasInitialized() - { - return _initialized; - } -} diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/instancemanager/IdManager.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/instancemanager/IdManager.java new file mode 100644 index 0000000000..d595a5befa --- /dev/null +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/instancemanager/IdManager.java @@ -0,0 +1,322 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.instancemanager; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.BitSet; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Logger; + +import org.l2jmobius.Config; +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.commons.database.DatabaseFactory; +import org.l2jmobius.gameserver.util.PrimeFinder; + +/** + * @author Mobius (reworked from L2J IdFactory) + */ +public class IdManager +{ + private static final Logger LOGGER = Logger.getLogger(IdManager.class.getName()); + + //@formatter:off + private static final String[][] ID_EXTRACTS = + { + {"characters","charId"}, + {"items","object_id"}, + {"clan_data","clan_id"}, + {"itemsonground","object_id"}, + {"messages","messageId"} + }; + //@formatter:on + + private static final String[] TIMESTAMPS_CLEAN = + { + "DELETE FROM character_instance_time WHERE time <= ?", + "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" + }; + + private static final int FIRST_OID = 0x10000000; + private static final int LAST_OID = 0x7FFFFFFF; + private static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; + + private static BitSet _freeIds; + private static AtomicInteger _freeIdCount; + private static AtomicInteger _nextFreeId; + private static boolean _initialized; + + public IdManager() + { + // Update characters online status. + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + statement.executeUpdate("UPDATE characters SET online = 0"); + LOGGER.info("Updated characters online status."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not update characters online status: " + e); + } + + // Cleanup database. + if (Config.DATABASE_CLEAN_UP) + { + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + final long cleanupStart = System.currentTimeMillis(); + int cleanCount = 0; + + // Characters + cleanCount += statement.executeUpdate("DELETE FROM account_gsdata WHERE account_gsdata.account_name NOT IN (SELECT account_name FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.contactId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.friendId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_hennas WHERE character_hennas.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_macroses WHERE character_macroses.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_quests WHERE character_quests.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_recipebook WHERE character_recipebook.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_recipeshoplist WHERE character_recipeshoplist.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_shortcuts WHERE character_shortcuts.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_skills WHERE character_skills.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_skills_save WHERE character_skills_save.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_subclasses WHERE character_subclasses.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_instance_time WHERE character_instance_time.charId NOT IN (SELECT charId FROM characters);"); + + // Items + cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id NOT IN (SELECT charId FROM characters) AND items.owner_id NOT IN (SELECT clan_id FROM clan_data) AND items.owner_id != -1;"); + cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id = -1 AND loc LIKE 'MAIL' AND loc_data NOT IN (SELECT messageId FROM messages WHERE senderId = -1);"); + cleanCount += statement.executeUpdate("DELETE FROM item_auction_bid WHERE item_auction_bid.playerObjId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM item_variations WHERE item_variations.itemId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_elementals WHERE item_elementals.itemId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_special_abilities WHERE item_special_abilities.objectId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_variables WHERE item_variables.id NOT IN (SELECT object_id FROM items);"); + + // Misc + cleanCount += statement.executeUpdate("DELETE FROM cursed_weapons WHERE cursed_weapons.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM heroes WHERE heroes.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles WHERE olympiad_nobles.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles_eom WHERE olympiad_nobles_eom.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM pets WHERE pets.item_obj_id NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM merchant_lease WHERE merchant_lease.player_id NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_reco_bonus WHERE character_reco_bonus.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.leader_id NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.clan_id NOT IN (SELECT clanid FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charOneId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charTwoId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM heroes_diary WHERE heroes_diary.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade WHERE character_offline_trade.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade_items WHERE character_offline_trade_items.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_tpbookmark WHERE character_tpbookmark.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_variables WHERE character_variables.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM bot_reported_char_data WHERE bot_reported_char_data.botId NOT IN (SELECT charId FROM characters);"); + + // Clan + cleanCount += statement.executeUpdate("DELETE FROM clan_privs WHERE clan_privs.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_skills WHERE clan_skills.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_subpledges WHERE clan_subpledges.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan1 NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan2 NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM siege_clans WHERE siege_clans.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_notices WHERE clan_notices.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM auction_bid WHERE auction_bid.bidderId NOT IN (SELECT clan_id FROM clan_data);"); + + // Forums + cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT clan_id FROM clan_data) AND forums.forum_parent=2;"); + cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT charId FROM characters) AND forums.forum_parent=3;"); + cleanCount += statement.executeUpdate("DELETE FROM posts WHERE posts.post_forum_id NOT IN (SELECT forum_id FROM forums);"); + cleanCount += statement.executeUpdate("DELETE FROM topic WHERE topic.topic_forum_id NOT IN (SELECT forum_id FROM forums);"); + + // Update needed items after cleaning has taken place. + statement.executeUpdate("UPDATE clan_data SET auction_bid_at = 0 WHERE auction_bid_at NOT IN (SELECT auctionId FROM auction_bid);"); + statement.executeUpdate("UPDATE clan_data SET new_leader_id = 0 WHERE new_leader_id <> 0 AND new_leader_id NOT IN (SELECT charId FROM characters);"); + statement.executeUpdate("UPDATE clan_subpledges SET leader_id=0 WHERE clan_subpledges.leader_id NOT IN (SELECT charId FROM characters) AND leader_id > 0;"); + statement.executeUpdate("UPDATE castle SET side='NEUTRAL' WHERE castle.id NOT IN (SELECT hasCastle FROM clan_data);"); + statement.executeUpdate("UPDATE characters SET clanid=0, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0, clan_join_expiry_time=0, clan_create_expiry_time=0 WHERE characters.clanid > 0 AND characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); + statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); + + LOGGER.info("IdManager: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not clean up database: " + e); + } + } + + // Cleanup timestamps. + try (Connection con = DatabaseFactory.getConnection()) + { + int cleanCount = 0; + for (String line : TIMESTAMPS_CLEAN) + { + try (PreparedStatement statement = con.prepareStatement(line)) + { + statement.setLong(1, System.currentTimeMillis()); + cleanCount += statement.executeUpdate(); + } + } + LOGGER.info("IdManager: Cleaned " + cleanCount + " expired timestamps from database."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not clean expired timestamps from database. " + e); + } + + // Initialize. + try + { + _freeIds = new BitSet(PrimeFinder.nextPrime(100000)); + _freeIds.clear(); + _freeIdCount = new AtomicInteger(FREE_OBJECT_ID_SIZE); + + // Collect already used ids. + final List usedIds = new ArrayList<>(); + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + String extractUsedObjectIdsQuery = ""; + for (String[] tblClmn : ID_EXTRACTS) + { + extractUsedObjectIdsQuery += "SELECT " + tblClmn[1] + " FROM " + tblClmn[0] + " UNION "; + } + extractUsedObjectIdsQuery = extractUsedObjectIdsQuery.substring(0, extractUsedObjectIdsQuery.length() - 7); // Remove the last " UNION " + try (ResultSet result = statement.executeQuery(extractUsedObjectIdsQuery)) + { + while (result.next()) + { + usedIds.add(result.getInt(1)); + } + } + } + Collections.sort(usedIds); + + // Register used ids. + for (int usedObjectId : usedIds) + { + final int objectId = usedObjectId - FIRST_OID; + if (objectId < 0) + { + LOGGER.warning("IdManager: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); + continue; + } + _freeIds.set(usedObjectId - FIRST_OID); + _freeIdCount.decrementAndGet(); + } + + _nextFreeId = new AtomicInteger(_freeIds.nextClearBit(0)); + _initialized = true; + } + catch (Exception e) + { + _initialized = false; + LOGGER.severe("IdManager: Could not be initialized properly: " + e.getMessage()); + } + + // Schedule increase capacity task. + ThreadPool.scheduleAtFixedRate(() -> + { + synchronized (_nextFreeId) + { + if (PrimeFinder.nextPrime((usedIdCount() * 11) / 10) > _freeIds.size()) + { + increaseBitSetCapacity(); + } + } + }, 30000, 30000); + + LOGGER.info("IdManager: " + _freeIds.size() + " id's available."); + } + + public void releaseId(int objectId) + { + synchronized (_nextFreeId) + { + if ((objectId - FIRST_OID) > -1) + { + _freeIds.clear(objectId - FIRST_OID); + _freeIdCount.incrementAndGet(); + } + else + { + LOGGER.warning("IdManager: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); + } + } + } + + public int getNextId() + { + synchronized (_nextFreeId) + { + final int newId = _nextFreeId.get(); + _freeIds.set(newId); + _freeIdCount.decrementAndGet(); + + final int nextFree = _freeIds.nextClearBit(newId) < 0 ? _freeIds.nextClearBit(0) : _freeIds.nextClearBit(newId); + if (nextFree < 0) + { + if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) + { + throw new NullPointerException("IdManager: Ran out of valid ids."); + } + increaseBitSetCapacity(); + } + _nextFreeId.set(nextFree); + + return newId + FIRST_OID; + } + } + + private void increaseBitSetCapacity() + { + final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); + newBitSet.or(_freeIds); + _freeIds = newBitSet; + } + + private int usedIdCount() + { + return _freeIdCount.get() - FIRST_OID; + } + + public static int size() + { + return _freeIdCount.get(); + } + + public static boolean hasInitialized() + { + return _initialized; + } + + public static IdManager getInstance() + { + return SingletonHolder.INSTANCE; + } + + private static class SingletonHolder + { + protected static final IdManager INSTANCE = new IdManager(); + } +} diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/instancemanager/MailManager.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/instancemanager/MailManager.java index 176b407caa..2a82541b39 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/instancemanager/MailManager.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/instancemanager/MailManager.java @@ -31,7 +31,6 @@ import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.entity.Message; @@ -277,7 +276,7 @@ public class MailManager } _messages.remove(msgId); - IdFactory.releaseId(msgId); + IdManager.getInstance().releaseId(msgId); } /** diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/Petition.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/Petition.java index 0c1524f59b..b19b6f9025 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/Petition.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/Petition.java @@ -21,7 +21,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.PetitionState; import org.l2jmobius.gameserver.enums.PetitionType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.PetitionManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -47,7 +47,7 @@ public class Petition public Petition(PlayerInstance petitioner, String petitionText, int petitionType) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _type = PetitionType.values()[petitionType - 1]; _content = petitionText; _petitioner = petitioner; diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/WorldObject.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/WorldObject.java index 18e793a718..3b8f7fb5fb 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/WorldObject.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/WorldObject.java @@ -24,7 +24,7 @@ import org.l2jmobius.gameserver.handler.ActionHandler; import org.l2jmobius.gameserver.handler.ActionShiftHandler; import org.l2jmobius.gameserver.handler.IActionHandler; import org.l2jmobius.gameserver.handler.IActionShiftHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; @@ -154,8 +154,8 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif public void refreshId() { World.getInstance().removeObject(this); - IdFactory.releaseId(getObjectId()); - _objectId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(getObjectId()); + _objectId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Creature.java index de007f3b17..8acdcc082c 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -63,7 +63,7 @@ import org.l2jmobius.gameserver.enums.Team; import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MapRegionManager; import org.l2jmobius.gameserver.instancemanager.QuestManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; @@ -288,7 +288,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public Creature(CreatureTemplate template) { - this(IdFactory.getNextId(), template); + this(IdManager.getInstance().getNextId(), template); } /** diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java index d132ad18fc..12209da801 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java @@ -20,7 +20,7 @@ import java.util.concurrent.Future; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.gameserver.enums.InstanceType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.stat.ControllableAirShipStat; import org.l2jmobius.gameserver.model.actor.templates.CreatureTemplate; import org.l2jmobius.gameserver.model.skills.AbnormalType; @@ -48,7 +48,7 @@ public class ControllableAirShipInstance extends AirShipInstance super(template); setInstanceType(InstanceType.ControllableAirShipInstance); _ownerId = ownerId; - _helmId = IdFactory.getNextId(); // not forget to release ! + _helmId = IdManager.getInstance().getNextId(); // not forget to release ! } @Override @@ -282,8 +282,8 @@ public class ControllableAirShipInstance extends AirShipInstance public void refreshId() { super.refreshId(); - IdFactory.releaseId(_helmId); - _helmId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(_helmId); + _helmId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java index 48c52c920f..c8412e68be 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.actor.instance; import org.l2jmobius.gameserver.data.xml.impl.FenceData; import org.l2jmobius.gameserver.enums.FenceState; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; @@ -44,7 +44,7 @@ public class FenceInstance extends WorldObject public FenceInstance(int x, int y, String name, int width, int length, int height, FenceState state) { - super(IdFactory.getNextId()); + super(IdManager.getInstance().getNextId()); _xMin = x - (width / 2); _xMax = x + (width / 2); @@ -59,7 +59,7 @@ public class FenceInstance extends WorldObject _heightFences = new int[height - 1]; for (int i = 0; i < _heightFences.length; i++) { - _heightFences[i] = IdFactory.getNextId(); + _heightFences[i] = IdManager.getInstance().getNextId(); } } } diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 47a841958d..554ba0b915 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -107,7 +107,6 @@ import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; import org.l2jmobius.gameserver.handler.IItemHandler; import org.l2jmobius.gameserver.handler.ItemHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CursedWeaponsManager; @@ -116,6 +115,7 @@ import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.HandysBlockCheckerManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager; import org.l2jmobius.gameserver.instancemanager.MentorManager; @@ -1152,7 +1152,7 @@ public class PlayerInstance extends Playable */ private PlayerInstance(PlayerTemplate template, String accountName, PlayerAppearance app) { - this(IdFactory.getNextId(), template, accountName, app); + this(IdManager.getInstance().getNextId(), template, accountName, app); } @Override diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java index 0564bbbe5e..b493b68bcc 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java @@ -21,7 +21,7 @@ import java.util.Locale; import org.l2jmobius.Config; import org.l2jmobius.commons.util.StringUtil; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.HistoryInfo; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.RaceState; @@ -160,7 +160,7 @@ public class RaceManagerInstance extends Npc player.setRace(0, 0); player.setRace(1, 0); - ItemInstance item = new ItemInstance(IdFactory.getNextId(), 4443); + ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 4443); item.setCount(1); item.setEnchantLevel(MonsterRace.getInstance().getRaceNumber()); item.setCustomType1(ticket); diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java index 6762897720..929d68a27f 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.announce; import java.util.Date; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.script.DateRange; /** @@ -32,7 +32,7 @@ public class EventAnnouncement implements IAnnouncement public EventAnnouncement(DateRange range, String content) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _range = range; _content = content; } @@ -88,7 +88,7 @@ public class EventAnnouncement implements IAnnouncement @Override public boolean deleteMe() { - IdFactory.releaseId(_id); + IdManager.getInstance().releaseId(_id); return true; } diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/entity/Couple.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/entity/Couple.java index 6897b8d681..54104ff7ab 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/entity/Couple.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/entity/Couple.java @@ -24,7 +24,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; /** @@ -85,7 +85,7 @@ public class Couple try (Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO mods_wedding (id, player1Id, player2Id, married, affianceDate, weddingDate) VALUES (?, ?, ?, ?, ?, ?)")) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); ps.setInt(1, _id); ps.setInt(2, _player1Id); ps.setInt(3, _player2Id); diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/entity/Message.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/entity/Message.java index 1b0ebe1d93..9002ebdc1a 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/entity/Message.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/entity/Message.java @@ -24,7 +24,7 @@ import java.sql.SQLException; import org.l2jmobius.gameserver.data.sql.impl.CharNameTable; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MailManager; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -99,7 +99,7 @@ public class Message */ public Message(int senderId, int receiverId, boolean isCod, String subject, String text, long reqAdena) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -118,7 +118,7 @@ public class Message */ public Message(int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = subject; @@ -138,7 +138,7 @@ public class Message */ public Message(int senderId, int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -157,7 +157,7 @@ public class Message */ public Message(Message msg) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = msg.getSenderId(); _receiverId = msg.getSenderId(); _subject = ""; @@ -177,7 +177,7 @@ public class Message public Message(int receiverId, ItemInstance item, MailType mailType) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = ""; diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java index e1e27e6111..800fb576c7 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java @@ -17,7 +17,7 @@ package org.l2jmobius.gameserver.model.itemauction; import org.l2jmobius.gameserver.datatables.ItemTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -78,7 +78,7 @@ public class AuctionItem public ItemInstance createNewItemInstance() { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), _itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), _itemId); World.getInstance().addObject(item); item.setCount(_itemCount); item.setEnchantLevel(item.getItem().getDefaultEnchantLevel()); diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 48384d77b9..54b8a4d2b6 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -47,8 +47,8 @@ import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemSkillType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.CastleManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.SiegeGuardManager; import org.l2jmobius.gameserver.model.DropProtection; @@ -262,7 +262,7 @@ public class ItemInstance extends WorldObject */ public ItemInstance(int itemId) { - this(IdFactory.getNextId(), itemId); + this(IdManager.getInstance().getNextId(), itemId); } /** diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java index ee2437143a..7fa54aa75e 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java @@ -16,7 +16,7 @@ */ package org.l2jmobius.gameserver.model.zone; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -50,7 +50,7 @@ public abstract class ZoneForm protected final void dropDebugItem(int itemId, int num, int x, int y, int z) { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); item.setCount(num); item.spawnMe(x, y, z + 5); ZoneManager.getInstance().getDebugItems().add(item); diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/GameServer.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/GameServer.java index fe6f164da2..2d63e65300 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/GameServer.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/GameServer.java @@ -107,7 +107,6 @@ import org.l2jmobius.gameserver.handler.ConditionHandler; import org.l2jmobius.gameserver.handler.DailyMissionHandler; import org.l2jmobius.gameserver.handler.EffectHandler; import org.l2jmobius.gameserver.handler.SkillConditionHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AirShipManager; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.BoatManager; @@ -126,6 +125,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.GraciaSeedsManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.instancemanager.ItemAuctionManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; @@ -208,9 +208,9 @@ public class GameServer printSection("ThreadPool"); ThreadPool.init(); - printSection("IdFactory"); - IdFactory.init(); - if (!IdFactory.hasInitialized()) + printSection("IdManager"); + IdManager.getInstance(); + if (!IdManager.hasInitialized()) { LOGGER.severe(getClass().getSimpleName() + ": Could not read object IDs from database. Please check your configuration."); throw new Exception("Could not initialize the ID factory!"); @@ -425,7 +425,7 @@ public class GameServer Runtime.getRuntime().addShutdownHook(Shutdown.getInstance()); - LOGGER.info("IdFactory: Free ObjectID's remaining: " + IdFactory.size()); + LOGGER.info("IdManager: Free ObjectID's remaining: " + IdManager.size()); if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS) { diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java index 0929ab7f5f..f80750ae97 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java @@ -35,10 +35,10 @@ import org.l2jmobius.gameserver.communitybbs.Manager.ForumsBBSManager; import org.l2jmobius.gameserver.data.xml.impl.ClanHallData; import org.l2jmobius.gameserver.enums.ClanWarState; import org.l2jmobius.gameserver.enums.UserInfoType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.ClanEntryManager; import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.SiegeManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -196,7 +196,7 @@ public class ClanTable return null; } - final Clan clan = new Clan(IdFactory.getNextId(), clanName); + final Clan clan = new Clan(IdManager.getInstance().getNextId(), clanName); final ClanMember leader = new ClanMember(clan, player); clan.setLeader(leader); leader.setPlayerInstance(player); @@ -271,7 +271,7 @@ public class ClanTable } _clans.remove(clanId); - IdFactory.releaseId(clanId); + IdManager.getInstance().releaseId(clanId); try (Connection con = DatabaseFactory.getConnection()) { diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/datatables/ItemTable.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/datatables/ItemTable.java index ffbc08a6d9..da12c37a86 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/datatables/ItemTable.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/datatables/ItemTable.java @@ -34,7 +34,7 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.data.xml.impl.EnchantItemHPBonusData; import org.l2jmobius.gameserver.engines.DocumentEngine; import org.l2jmobius.gameserver.enums.ItemLocation; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Attackable; @@ -212,7 +212,7 @@ public class ItemTable public ItemInstance createItem(String process, int itemId, long count, Creature actor, Object reference) { // Create and Init the ItemInstance corresponding to the Item Identifier - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); if (process.equalsIgnoreCase("loot") && !Config.AUTO_LOOT_ITEM_IDS.contains(itemId)) { ScheduledFuture itemLootShedule; @@ -330,7 +330,7 @@ public class ItemTable item.setLastChange(ItemInstance.REMOVED); World.getInstance().removeObject(item); - IdFactory.releaseId(item.getObjectId()); + IdManager.getInstance().releaseId(item.getObjectId()); if (Config.LOG_ITEMS) { diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/idfactory/IdFactory.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/idfactory/IdFactory.java deleted file mode 100644 index d4447a7dea..0000000000 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/idfactory/IdFactory.java +++ /dev/null @@ -1,337 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.l2jmobius.gameserver.idfactory; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.BitSet; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.logging.Logger; - -import org.l2jmobius.Config; -import org.l2jmobius.commons.concurrent.ThreadPool; -import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.util.PrimeFinder; - -/** - * @author Mobius (reworked from L2J version) - */ -public abstract class IdFactory -{ - private static final Logger LOGGER = Logger.getLogger(IdFactory.class.getName()); - - protected static final String[] ID_CHECKS = - { - "SELECT owner_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT object_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT charId FROM character_quests WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_contacts WHERE charId >= ? AND charId < ?", - "SELECT contactId FROM character_contacts WHERE contactId >= ? AND contactId < ?", - "SELECT charId FROM character_friends WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_friends WHERE friendId >= ? AND friendId < ?", - "SELECT charId FROM character_hennas WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipebook WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipeshoplist WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_shortcuts WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_macroses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills_save WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_subclasses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM characters WHERE charId >= ? AND charId < ?", - "SELECT clanid FROM characters WHERE clanid >= ? AND clanid < ?", - "SELECT clan_id FROM clan_data WHERE clan_id >= ? AND clan_id < ?", - "SELECT clan_id FROM siege_clans WHERE clan_id >= ? AND clan_id < ?", - "SELECT ally_id FROM clan_data WHERE ally_id >= ? AND ally_id < ?", - "SELECT leader_id FROM clan_data WHERE leader_id >= ? AND leader_id < ?", - "SELECT item_obj_id FROM pets WHERE item_obj_id >= ? AND item_obj_id < ?", - "SELECT object_id FROM itemsonground WHERE object_id >= ? AND object_id < ?", - "SELECT summonId FROM characters_summons WHERE summonId >= ? AND summonId < ?" - }; - //@formatter:off - private static final String[][] ID_EXTRACTS = - { - {"characters","charId"}, - {"items","object_id"}, - {"clan_data","clan_id"}, - {"itemsonground","object_id"}, - {"messages","messageId"} - }; - //@formatter:on - private static final String[] TIMESTAMPS_CLEAN = - { - "DELETE FROM character_instance_time WHERE time <= ?", - "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" - }; - public static final int FIRST_OID = 0x10000000; - public static final int LAST_OID = 0x7FFFFFFF; - public static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; - - private static BitSet _freeIds; - private static AtomicInteger _freeIdCount; - private static AtomicInteger _nextFreeId; - private static boolean _initialized; - - public static void init() - { - // Update characters online status. - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - statement.executeUpdate("UPDATE characters SET online = 0"); - LOGGER.info("Updated characters online status."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not update characters online status: " + e); - } - - // Cleanup database. - if (Config.DATABASE_CLEAN_UP) - { - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - final long cleanupStart = System.currentTimeMillis(); - int cleanCount = 0; - - // Characters - cleanCount += statement.executeUpdate("DELETE FROM account_gsdata WHERE account_gsdata.account_name NOT IN (SELECT account_name FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.contactId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.friendId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_hennas WHERE character_hennas.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_macroses WHERE character_macroses.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_quests WHERE character_quests.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_recipebook WHERE character_recipebook.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_recipeshoplist WHERE character_recipeshoplist.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_shortcuts WHERE character_shortcuts.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_skills WHERE character_skills.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_skills_save WHERE character_skills_save.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_subclasses WHERE character_subclasses.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_instance_time WHERE character_instance_time.charId NOT IN (SELECT charId FROM characters);"); - - // Items - cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id NOT IN (SELECT charId FROM characters) AND items.owner_id NOT IN (SELECT clan_id FROM clan_data) AND items.owner_id != -1;"); - cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id = -1 AND loc LIKE 'MAIL' AND loc_data NOT IN (SELECT messageId FROM messages WHERE senderId = -1);"); - cleanCount += statement.executeUpdate("DELETE FROM item_auction_bid WHERE item_auction_bid.playerObjId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM item_variations WHERE item_variations.itemId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_elementals WHERE item_elementals.itemId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_special_abilities WHERE item_special_abilities.objectId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_variables WHERE item_variables.id NOT IN (SELECT object_id FROM items);"); - - // Misc - cleanCount += statement.executeUpdate("DELETE FROM cursed_weapons WHERE cursed_weapons.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM heroes WHERE heroes.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles WHERE olympiad_nobles.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles_eom WHERE olympiad_nobles_eom.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM pets WHERE pets.item_obj_id NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM merchant_lease WHERE merchant_lease.player_id NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_reco_bonus WHERE character_reco_bonus.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.leader_id NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.clan_id NOT IN (SELECT clanid FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charOneId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charTwoId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM heroes_diary WHERE heroes_diary.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade WHERE character_offline_trade.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade_items WHERE character_offline_trade_items.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_tpbookmark WHERE character_tpbookmark.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_variables WHERE character_variables.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM bot_reported_char_data WHERE bot_reported_char_data.botId NOT IN (SELECT charId FROM characters);"); - - // Clan - cleanCount += statement.executeUpdate("DELETE FROM clan_privs WHERE clan_privs.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_skills WHERE clan_skills.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_subpledges WHERE clan_subpledges.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan1 NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan2 NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM siege_clans WHERE siege_clans.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_notices WHERE clan_notices.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM auction_bid WHERE auction_bid.bidderId NOT IN (SELECT clan_id FROM clan_data);"); - - // Forums - cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT clan_id FROM clan_data) AND forums.forum_parent=2;"); - cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT charId FROM characters) AND forums.forum_parent=3;"); - cleanCount += statement.executeUpdate("DELETE FROM posts WHERE posts.post_forum_id NOT IN (SELECT forum_id FROM forums);"); - cleanCount += statement.executeUpdate("DELETE FROM topic WHERE topic.topic_forum_id NOT IN (SELECT forum_id FROM forums);"); - - // Update needed items after cleaning has taken place. - statement.executeUpdate("UPDATE clan_data SET auction_bid_at = 0 WHERE auction_bid_at NOT IN (SELECT auctionId FROM auction_bid);"); - statement.executeUpdate("UPDATE clan_data SET new_leader_id = 0 WHERE new_leader_id <> 0 AND new_leader_id NOT IN (SELECT charId FROM characters);"); - statement.executeUpdate("UPDATE clan_subpledges SET leader_id=0 WHERE clan_subpledges.leader_id NOT IN (SELECT charId FROM characters) AND leader_id > 0;"); - statement.executeUpdate("UPDATE castle SET side='NEUTRAL' WHERE castle.id NOT IN (SELECT hasCastle FROM clan_data);"); - statement.executeUpdate("UPDATE characters SET clanid=0, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0, clan_join_expiry_time=0, clan_create_expiry_time=0 WHERE characters.clanid > 0 AND characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); - statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); - - LOGGER.info("IdFactory: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not clean up database: " + e); - } - } - - // Cleanup timestamps. - try (Connection con = DatabaseFactory.getConnection()) - { - int cleanCount = 0; - for (String line : TIMESTAMPS_CLEAN) - { - try (PreparedStatement statement = con.prepareStatement(line)) - { - statement.setLong(1, System.currentTimeMillis()); - cleanCount += statement.executeUpdate(); - } - } - LOGGER.info("IdFactory: Cleaned " + cleanCount + " expired timestamps from database."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not clean expired timestamps from database. " + e); - } - - // Initialize. - try - { - _freeIds = new BitSet(PrimeFinder.nextPrime(100000)); - _freeIds.clear(); - _freeIdCount = new AtomicInteger(FREE_OBJECT_ID_SIZE); - - // Collect already used ids. - final List usedIds = new ArrayList<>(); - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - String extractUsedObjectIdsQuery = ""; - for (String[] tblClmn : ID_EXTRACTS) - { - extractUsedObjectIdsQuery += "SELECT " + tblClmn[1] + " FROM " + tblClmn[0] + " UNION "; - } - extractUsedObjectIdsQuery = extractUsedObjectIdsQuery.substring(0, extractUsedObjectIdsQuery.length() - 7); // Remove the last " UNION " - try (ResultSet result = statement.executeQuery(extractUsedObjectIdsQuery)) - { - while (result.next()) - { - usedIds.add(result.getInt(1)); - } - } - } - Collections.sort(usedIds); - - // Register used ids. - for (int usedObjectId : usedIds) - { - final int objectId = usedObjectId - FIRST_OID; - if (objectId < 0) - { - LOGGER.warning("IdFactory: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); - continue; - } - _freeIds.set(usedObjectId - FIRST_OID); - _freeIdCount.decrementAndGet(); - } - - _nextFreeId = new AtomicInteger(_freeIds.nextClearBit(0)); - _initialized = true; - } - catch (Exception e) - { - _initialized = false; - LOGGER.severe("IdFactory: Could not be initialized properly: " + e.getMessage()); - } - - // Schedule increase capacity task. - ThreadPool.scheduleAtFixedRate(() -> - { - synchronized (_nextFreeId) - { - if (PrimeFinder.nextPrime((usedIdCount() * 11) / 10) > _freeIds.size()) - { - increaseBitSetCapacity(); - } - } - }, 30000, 30000); - - LOGGER.info("IdFactory: " + _freeIds.size() + " id's available."); - } - - public synchronized static void releaseId(int objectId) - { - synchronized (_nextFreeId) - { - if ((objectId - FIRST_OID) > -1) - { - _freeIds.clear(objectId - FIRST_OID); - _freeIdCount.incrementAndGet(); - } - else - { - LOGGER.warning("IdFactory: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); - } - } - } - - public synchronized static int getNextId() - { - synchronized (_nextFreeId) - { - final int newId = _nextFreeId.get(); - _freeIds.set(newId); - _freeIdCount.decrementAndGet(); - - final int nextFree = _freeIds.nextClearBit(newId) < 0 ? _freeIds.nextClearBit(0) : _freeIds.nextClearBit(newId); - if (nextFree < 0) - { - if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) - { - throw new NullPointerException("IdFactory: Ran out of valid ids."); - } - increaseBitSetCapacity(); - } - _nextFreeId.set(nextFree); - - return newId + FIRST_OID; - } - } - - private static void increaseBitSetCapacity() - { - final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); - newBitSet.or(_freeIds); - _freeIds = newBitSet; - } - - private static int usedIdCount() - { - return _freeIdCount.get() - FIRST_OID; - } - - public static int size() - { - return _freeIdCount.get(); - } - - public static boolean hasInitialized() - { - return _initialized; - } -} diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/instancemanager/IdManager.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/instancemanager/IdManager.java new file mode 100644 index 0000000000..d595a5befa --- /dev/null +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/instancemanager/IdManager.java @@ -0,0 +1,322 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.instancemanager; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.BitSet; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Logger; + +import org.l2jmobius.Config; +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.commons.database.DatabaseFactory; +import org.l2jmobius.gameserver.util.PrimeFinder; + +/** + * @author Mobius (reworked from L2J IdFactory) + */ +public class IdManager +{ + private static final Logger LOGGER = Logger.getLogger(IdManager.class.getName()); + + //@formatter:off + private static final String[][] ID_EXTRACTS = + { + {"characters","charId"}, + {"items","object_id"}, + {"clan_data","clan_id"}, + {"itemsonground","object_id"}, + {"messages","messageId"} + }; + //@formatter:on + + private static final String[] TIMESTAMPS_CLEAN = + { + "DELETE FROM character_instance_time WHERE time <= ?", + "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" + }; + + private static final int FIRST_OID = 0x10000000; + private static final int LAST_OID = 0x7FFFFFFF; + private static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; + + private static BitSet _freeIds; + private static AtomicInteger _freeIdCount; + private static AtomicInteger _nextFreeId; + private static boolean _initialized; + + public IdManager() + { + // Update characters online status. + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + statement.executeUpdate("UPDATE characters SET online = 0"); + LOGGER.info("Updated characters online status."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not update characters online status: " + e); + } + + // Cleanup database. + if (Config.DATABASE_CLEAN_UP) + { + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + final long cleanupStart = System.currentTimeMillis(); + int cleanCount = 0; + + // Characters + cleanCount += statement.executeUpdate("DELETE FROM account_gsdata WHERE account_gsdata.account_name NOT IN (SELECT account_name FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.contactId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.friendId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_hennas WHERE character_hennas.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_macroses WHERE character_macroses.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_quests WHERE character_quests.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_recipebook WHERE character_recipebook.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_recipeshoplist WHERE character_recipeshoplist.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_shortcuts WHERE character_shortcuts.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_skills WHERE character_skills.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_skills_save WHERE character_skills_save.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_subclasses WHERE character_subclasses.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_instance_time WHERE character_instance_time.charId NOT IN (SELECT charId FROM characters);"); + + // Items + cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id NOT IN (SELECT charId FROM characters) AND items.owner_id NOT IN (SELECT clan_id FROM clan_data) AND items.owner_id != -1;"); + cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id = -1 AND loc LIKE 'MAIL' AND loc_data NOT IN (SELECT messageId FROM messages WHERE senderId = -1);"); + cleanCount += statement.executeUpdate("DELETE FROM item_auction_bid WHERE item_auction_bid.playerObjId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM item_variations WHERE item_variations.itemId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_elementals WHERE item_elementals.itemId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_special_abilities WHERE item_special_abilities.objectId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_variables WHERE item_variables.id NOT IN (SELECT object_id FROM items);"); + + // Misc + cleanCount += statement.executeUpdate("DELETE FROM cursed_weapons WHERE cursed_weapons.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM heroes WHERE heroes.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles WHERE olympiad_nobles.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles_eom WHERE olympiad_nobles_eom.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM pets WHERE pets.item_obj_id NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM merchant_lease WHERE merchant_lease.player_id NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_reco_bonus WHERE character_reco_bonus.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.leader_id NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.clan_id NOT IN (SELECT clanid FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charOneId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charTwoId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM heroes_diary WHERE heroes_diary.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade WHERE character_offline_trade.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade_items WHERE character_offline_trade_items.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_tpbookmark WHERE character_tpbookmark.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_variables WHERE character_variables.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM bot_reported_char_data WHERE bot_reported_char_data.botId NOT IN (SELECT charId FROM characters);"); + + // Clan + cleanCount += statement.executeUpdate("DELETE FROM clan_privs WHERE clan_privs.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_skills WHERE clan_skills.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_subpledges WHERE clan_subpledges.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan1 NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan2 NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM siege_clans WHERE siege_clans.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_notices WHERE clan_notices.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM auction_bid WHERE auction_bid.bidderId NOT IN (SELECT clan_id FROM clan_data);"); + + // Forums + cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT clan_id FROM clan_data) AND forums.forum_parent=2;"); + cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT charId FROM characters) AND forums.forum_parent=3;"); + cleanCount += statement.executeUpdate("DELETE FROM posts WHERE posts.post_forum_id NOT IN (SELECT forum_id FROM forums);"); + cleanCount += statement.executeUpdate("DELETE FROM topic WHERE topic.topic_forum_id NOT IN (SELECT forum_id FROM forums);"); + + // Update needed items after cleaning has taken place. + statement.executeUpdate("UPDATE clan_data SET auction_bid_at = 0 WHERE auction_bid_at NOT IN (SELECT auctionId FROM auction_bid);"); + statement.executeUpdate("UPDATE clan_data SET new_leader_id = 0 WHERE new_leader_id <> 0 AND new_leader_id NOT IN (SELECT charId FROM characters);"); + statement.executeUpdate("UPDATE clan_subpledges SET leader_id=0 WHERE clan_subpledges.leader_id NOT IN (SELECT charId FROM characters) AND leader_id > 0;"); + statement.executeUpdate("UPDATE castle SET side='NEUTRAL' WHERE castle.id NOT IN (SELECT hasCastle FROM clan_data);"); + statement.executeUpdate("UPDATE characters SET clanid=0, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0, clan_join_expiry_time=0, clan_create_expiry_time=0 WHERE characters.clanid > 0 AND characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); + statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); + + LOGGER.info("IdManager: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not clean up database: " + e); + } + } + + // Cleanup timestamps. + try (Connection con = DatabaseFactory.getConnection()) + { + int cleanCount = 0; + for (String line : TIMESTAMPS_CLEAN) + { + try (PreparedStatement statement = con.prepareStatement(line)) + { + statement.setLong(1, System.currentTimeMillis()); + cleanCount += statement.executeUpdate(); + } + } + LOGGER.info("IdManager: Cleaned " + cleanCount + " expired timestamps from database."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not clean expired timestamps from database. " + e); + } + + // Initialize. + try + { + _freeIds = new BitSet(PrimeFinder.nextPrime(100000)); + _freeIds.clear(); + _freeIdCount = new AtomicInteger(FREE_OBJECT_ID_SIZE); + + // Collect already used ids. + final List usedIds = new ArrayList<>(); + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + String extractUsedObjectIdsQuery = ""; + for (String[] tblClmn : ID_EXTRACTS) + { + extractUsedObjectIdsQuery += "SELECT " + tblClmn[1] + " FROM " + tblClmn[0] + " UNION "; + } + extractUsedObjectIdsQuery = extractUsedObjectIdsQuery.substring(0, extractUsedObjectIdsQuery.length() - 7); // Remove the last " UNION " + try (ResultSet result = statement.executeQuery(extractUsedObjectIdsQuery)) + { + while (result.next()) + { + usedIds.add(result.getInt(1)); + } + } + } + Collections.sort(usedIds); + + // Register used ids. + for (int usedObjectId : usedIds) + { + final int objectId = usedObjectId - FIRST_OID; + if (objectId < 0) + { + LOGGER.warning("IdManager: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); + continue; + } + _freeIds.set(usedObjectId - FIRST_OID); + _freeIdCount.decrementAndGet(); + } + + _nextFreeId = new AtomicInteger(_freeIds.nextClearBit(0)); + _initialized = true; + } + catch (Exception e) + { + _initialized = false; + LOGGER.severe("IdManager: Could not be initialized properly: " + e.getMessage()); + } + + // Schedule increase capacity task. + ThreadPool.scheduleAtFixedRate(() -> + { + synchronized (_nextFreeId) + { + if (PrimeFinder.nextPrime((usedIdCount() * 11) / 10) > _freeIds.size()) + { + increaseBitSetCapacity(); + } + } + }, 30000, 30000); + + LOGGER.info("IdManager: " + _freeIds.size() + " id's available."); + } + + public void releaseId(int objectId) + { + synchronized (_nextFreeId) + { + if ((objectId - FIRST_OID) > -1) + { + _freeIds.clear(objectId - FIRST_OID); + _freeIdCount.incrementAndGet(); + } + else + { + LOGGER.warning("IdManager: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); + } + } + } + + public int getNextId() + { + synchronized (_nextFreeId) + { + final int newId = _nextFreeId.get(); + _freeIds.set(newId); + _freeIdCount.decrementAndGet(); + + final int nextFree = _freeIds.nextClearBit(newId) < 0 ? _freeIds.nextClearBit(0) : _freeIds.nextClearBit(newId); + if (nextFree < 0) + { + if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) + { + throw new NullPointerException("IdManager: Ran out of valid ids."); + } + increaseBitSetCapacity(); + } + _nextFreeId.set(nextFree); + + return newId + FIRST_OID; + } + } + + private void increaseBitSetCapacity() + { + final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); + newBitSet.or(_freeIds); + _freeIds = newBitSet; + } + + private int usedIdCount() + { + return _freeIdCount.get() - FIRST_OID; + } + + public static int size() + { + return _freeIdCount.get(); + } + + public static boolean hasInitialized() + { + return _initialized; + } + + public static IdManager getInstance() + { + return SingletonHolder.INSTANCE; + } + + private static class SingletonHolder + { + protected static final IdManager INSTANCE = new IdManager(); + } +} diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/instancemanager/MailManager.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/instancemanager/MailManager.java index 176b407caa..2a82541b39 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/instancemanager/MailManager.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/instancemanager/MailManager.java @@ -31,7 +31,6 @@ import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.entity.Message; @@ -277,7 +276,7 @@ public class MailManager } _messages.remove(msgId); - IdFactory.releaseId(msgId); + IdManager.getInstance().releaseId(msgId); } /** diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/Petition.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/Petition.java index 0c1524f59b..b19b6f9025 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/Petition.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/Petition.java @@ -21,7 +21,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.PetitionState; import org.l2jmobius.gameserver.enums.PetitionType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.PetitionManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -47,7 +47,7 @@ public class Petition public Petition(PlayerInstance petitioner, String petitionText, int petitionType) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _type = PetitionType.values()[petitionType - 1]; _content = petitionText; _petitioner = petitioner; diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/WorldObject.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/WorldObject.java index 18e793a718..3b8f7fb5fb 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/WorldObject.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/WorldObject.java @@ -24,7 +24,7 @@ import org.l2jmobius.gameserver.handler.ActionHandler; import org.l2jmobius.gameserver.handler.ActionShiftHandler; import org.l2jmobius.gameserver.handler.IActionHandler; import org.l2jmobius.gameserver.handler.IActionShiftHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; @@ -154,8 +154,8 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif public void refreshId() { World.getInstance().removeObject(this); - IdFactory.releaseId(getObjectId()); - _objectId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(getObjectId()); + _objectId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Creature.java index de007f3b17..8acdcc082c 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -63,7 +63,7 @@ import org.l2jmobius.gameserver.enums.Team; import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MapRegionManager; import org.l2jmobius.gameserver.instancemanager.QuestManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; @@ -288,7 +288,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public Creature(CreatureTemplate template) { - this(IdFactory.getNextId(), template); + this(IdManager.getInstance().getNextId(), template); } /** diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java index d132ad18fc..12209da801 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java @@ -20,7 +20,7 @@ import java.util.concurrent.Future; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.gameserver.enums.InstanceType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.stat.ControllableAirShipStat; import org.l2jmobius.gameserver.model.actor.templates.CreatureTemplate; import org.l2jmobius.gameserver.model.skills.AbnormalType; @@ -48,7 +48,7 @@ public class ControllableAirShipInstance extends AirShipInstance super(template); setInstanceType(InstanceType.ControllableAirShipInstance); _ownerId = ownerId; - _helmId = IdFactory.getNextId(); // not forget to release ! + _helmId = IdManager.getInstance().getNextId(); // not forget to release ! } @Override @@ -282,8 +282,8 @@ public class ControllableAirShipInstance extends AirShipInstance public void refreshId() { super.refreshId(); - IdFactory.releaseId(_helmId); - _helmId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(_helmId); + _helmId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java index 48c52c920f..c8412e68be 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.actor.instance; import org.l2jmobius.gameserver.data.xml.impl.FenceData; import org.l2jmobius.gameserver.enums.FenceState; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; @@ -44,7 +44,7 @@ public class FenceInstance extends WorldObject public FenceInstance(int x, int y, String name, int width, int length, int height, FenceState state) { - super(IdFactory.getNextId()); + super(IdManager.getInstance().getNextId()); _xMin = x - (width / 2); _xMax = x + (width / 2); @@ -59,7 +59,7 @@ public class FenceInstance extends WorldObject _heightFences = new int[height - 1]; for (int i = 0; i < _heightFences.length; i++) { - _heightFences[i] = IdFactory.getNextId(); + _heightFences[i] = IdManager.getInstance().getNextId(); } } } diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 3af4ac96b6..0cbb0a7c79 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -107,7 +107,6 @@ import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; import org.l2jmobius.gameserver.handler.IItemHandler; import org.l2jmobius.gameserver.handler.ItemHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CursedWeaponsManager; @@ -116,6 +115,7 @@ import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.HandysBlockCheckerManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager; import org.l2jmobius.gameserver.instancemanager.MentorManager; @@ -1152,7 +1152,7 @@ public class PlayerInstance extends Playable */ private PlayerInstance(PlayerTemplate template, String accountName, PlayerAppearance app) { - this(IdFactory.getNextId(), template, accountName, app); + this(IdManager.getInstance().getNextId(), template, accountName, app); } @Override diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java index 0564bbbe5e..b493b68bcc 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java @@ -21,7 +21,7 @@ import java.util.Locale; import org.l2jmobius.Config; import org.l2jmobius.commons.util.StringUtil; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.HistoryInfo; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.RaceState; @@ -160,7 +160,7 @@ public class RaceManagerInstance extends Npc player.setRace(0, 0); player.setRace(1, 0); - ItemInstance item = new ItemInstance(IdFactory.getNextId(), 4443); + ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 4443); item.setCount(1); item.setEnchantLevel(MonsterRace.getInstance().getRaceNumber()); item.setCustomType1(ticket); diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java index 6762897720..929d68a27f 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.announce; import java.util.Date; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.script.DateRange; /** @@ -32,7 +32,7 @@ public class EventAnnouncement implements IAnnouncement public EventAnnouncement(DateRange range, String content) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _range = range; _content = content; } @@ -88,7 +88,7 @@ public class EventAnnouncement implements IAnnouncement @Override public boolean deleteMe() { - IdFactory.releaseId(_id); + IdManager.getInstance().releaseId(_id); return true; } diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/entity/Couple.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/entity/Couple.java index 6897b8d681..54104ff7ab 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/entity/Couple.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/entity/Couple.java @@ -24,7 +24,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; /** @@ -85,7 +85,7 @@ public class Couple try (Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO mods_wedding (id, player1Id, player2Id, married, affianceDate, weddingDate) VALUES (?, ?, ?, ?, ?, ?)")) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); ps.setInt(1, _id); ps.setInt(2, _player1Id); ps.setInt(3, _player2Id); diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/entity/Message.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/entity/Message.java index 1b0ebe1d93..9002ebdc1a 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/entity/Message.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/entity/Message.java @@ -24,7 +24,7 @@ import java.sql.SQLException; import org.l2jmobius.gameserver.data.sql.impl.CharNameTable; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MailManager; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -99,7 +99,7 @@ public class Message */ public Message(int senderId, int receiverId, boolean isCod, String subject, String text, long reqAdena) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -118,7 +118,7 @@ public class Message */ public Message(int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = subject; @@ -138,7 +138,7 @@ public class Message */ public Message(int senderId, int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -157,7 +157,7 @@ public class Message */ public Message(Message msg) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = msg.getSenderId(); _receiverId = msg.getSenderId(); _subject = ""; @@ -177,7 +177,7 @@ public class Message public Message(int receiverId, ItemInstance item, MailType mailType) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = ""; diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java index e1e27e6111..800fb576c7 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java @@ -17,7 +17,7 @@ package org.l2jmobius.gameserver.model.itemauction; import org.l2jmobius.gameserver.datatables.ItemTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -78,7 +78,7 @@ public class AuctionItem public ItemInstance createNewItemInstance() { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), _itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), _itemId); World.getInstance().addObject(item); item.setCount(_itemCount); item.setEnchantLevel(item.getItem().getDefaultEnchantLevel()); diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 48384d77b9..54b8a4d2b6 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -47,8 +47,8 @@ import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemSkillType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.CastleManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.SiegeGuardManager; import org.l2jmobius.gameserver.model.DropProtection; @@ -262,7 +262,7 @@ public class ItemInstance extends WorldObject */ public ItemInstance(int itemId) { - this(IdFactory.getNextId(), itemId); + this(IdManager.getInstance().getNextId(), itemId); } /** diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java index ee2437143a..7fa54aa75e 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java @@ -16,7 +16,7 @@ */ package org.l2jmobius.gameserver.model.zone; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -50,7 +50,7 @@ public abstract class ZoneForm protected final void dropDebugItem(int itemId, int num, int x, int y, int z) { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); item.setCount(num); item.spawnMe(x, y, z + 5); ZoneManager.getInstance().getDebugItems().add(item); diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/GameServer.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/GameServer.java index f3b597e79b..4832ea1281 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/GameServer.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/GameServer.java @@ -108,7 +108,6 @@ import org.l2jmobius.gameserver.handler.ConditionHandler; import org.l2jmobius.gameserver.handler.DailyMissionHandler; import org.l2jmobius.gameserver.handler.EffectHandler; import org.l2jmobius.gameserver.handler.SkillConditionHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AirShipManager; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.BoatManager; @@ -127,6 +126,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.GraciaSeedsManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.instancemanager.ItemAuctionManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; @@ -209,9 +209,9 @@ public class GameServer printSection("ThreadPool"); ThreadPool.init(); - printSection("IdFactory"); - IdFactory.init(); - if (!IdFactory.hasInitialized()) + printSection("IdManager"); + IdManager.getInstance(); + if (!IdManager.hasInitialized()) { LOGGER.severe(getClass().getSimpleName() + ": Could not read object IDs from database. Please check your configuration."); throw new Exception("Could not initialize the ID factory!"); @@ -427,7 +427,7 @@ public class GameServer Runtime.getRuntime().addShutdownHook(Shutdown.getInstance()); - LOGGER.info("IdFactory: Free ObjectID's remaining: " + IdFactory.size()); + LOGGER.info("IdManager: Free ObjectID's remaining: " + IdManager.size()); if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS) { diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java index 0929ab7f5f..f80750ae97 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java @@ -35,10 +35,10 @@ import org.l2jmobius.gameserver.communitybbs.Manager.ForumsBBSManager; import org.l2jmobius.gameserver.data.xml.impl.ClanHallData; import org.l2jmobius.gameserver.enums.ClanWarState; import org.l2jmobius.gameserver.enums.UserInfoType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.ClanEntryManager; import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.SiegeManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -196,7 +196,7 @@ public class ClanTable return null; } - final Clan clan = new Clan(IdFactory.getNextId(), clanName); + final Clan clan = new Clan(IdManager.getInstance().getNextId(), clanName); final ClanMember leader = new ClanMember(clan, player); clan.setLeader(leader); leader.setPlayerInstance(player); @@ -271,7 +271,7 @@ public class ClanTable } _clans.remove(clanId); - IdFactory.releaseId(clanId); + IdManager.getInstance().releaseId(clanId); try (Connection con = DatabaseFactory.getConnection()) { diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/datatables/ItemTable.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/datatables/ItemTable.java index ffbc08a6d9..da12c37a86 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/datatables/ItemTable.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/datatables/ItemTable.java @@ -34,7 +34,7 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.data.xml.impl.EnchantItemHPBonusData; import org.l2jmobius.gameserver.engines.DocumentEngine; import org.l2jmobius.gameserver.enums.ItemLocation; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Attackable; @@ -212,7 +212,7 @@ public class ItemTable public ItemInstance createItem(String process, int itemId, long count, Creature actor, Object reference) { // Create and Init the ItemInstance corresponding to the Item Identifier - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); if (process.equalsIgnoreCase("loot") && !Config.AUTO_LOOT_ITEM_IDS.contains(itemId)) { ScheduledFuture itemLootShedule; @@ -330,7 +330,7 @@ public class ItemTable item.setLastChange(ItemInstance.REMOVED); World.getInstance().removeObject(item); - IdFactory.releaseId(item.getObjectId()); + IdManager.getInstance().releaseId(item.getObjectId()); if (Config.LOG_ITEMS) { diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/idfactory/IdFactory.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/idfactory/IdFactory.java deleted file mode 100644 index d4447a7dea..0000000000 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/idfactory/IdFactory.java +++ /dev/null @@ -1,337 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.l2jmobius.gameserver.idfactory; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.BitSet; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.logging.Logger; - -import org.l2jmobius.Config; -import org.l2jmobius.commons.concurrent.ThreadPool; -import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.util.PrimeFinder; - -/** - * @author Mobius (reworked from L2J version) - */ -public abstract class IdFactory -{ - private static final Logger LOGGER = Logger.getLogger(IdFactory.class.getName()); - - protected static final String[] ID_CHECKS = - { - "SELECT owner_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT object_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT charId FROM character_quests WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_contacts WHERE charId >= ? AND charId < ?", - "SELECT contactId FROM character_contacts WHERE contactId >= ? AND contactId < ?", - "SELECT charId FROM character_friends WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_friends WHERE friendId >= ? AND friendId < ?", - "SELECT charId FROM character_hennas WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipebook WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipeshoplist WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_shortcuts WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_macroses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills_save WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_subclasses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM characters WHERE charId >= ? AND charId < ?", - "SELECT clanid FROM characters WHERE clanid >= ? AND clanid < ?", - "SELECT clan_id FROM clan_data WHERE clan_id >= ? AND clan_id < ?", - "SELECT clan_id FROM siege_clans WHERE clan_id >= ? AND clan_id < ?", - "SELECT ally_id FROM clan_data WHERE ally_id >= ? AND ally_id < ?", - "SELECT leader_id FROM clan_data WHERE leader_id >= ? AND leader_id < ?", - "SELECT item_obj_id FROM pets WHERE item_obj_id >= ? AND item_obj_id < ?", - "SELECT object_id FROM itemsonground WHERE object_id >= ? AND object_id < ?", - "SELECT summonId FROM characters_summons WHERE summonId >= ? AND summonId < ?" - }; - //@formatter:off - private static final String[][] ID_EXTRACTS = - { - {"characters","charId"}, - {"items","object_id"}, - {"clan_data","clan_id"}, - {"itemsonground","object_id"}, - {"messages","messageId"} - }; - //@formatter:on - private static final String[] TIMESTAMPS_CLEAN = - { - "DELETE FROM character_instance_time WHERE time <= ?", - "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" - }; - public static final int FIRST_OID = 0x10000000; - public static final int LAST_OID = 0x7FFFFFFF; - public static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; - - private static BitSet _freeIds; - private static AtomicInteger _freeIdCount; - private static AtomicInteger _nextFreeId; - private static boolean _initialized; - - public static void init() - { - // Update characters online status. - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - statement.executeUpdate("UPDATE characters SET online = 0"); - LOGGER.info("Updated characters online status."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not update characters online status: " + e); - } - - // Cleanup database. - if (Config.DATABASE_CLEAN_UP) - { - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - final long cleanupStart = System.currentTimeMillis(); - int cleanCount = 0; - - // Characters - cleanCount += statement.executeUpdate("DELETE FROM account_gsdata WHERE account_gsdata.account_name NOT IN (SELECT account_name FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.contactId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.friendId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_hennas WHERE character_hennas.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_macroses WHERE character_macroses.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_quests WHERE character_quests.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_recipebook WHERE character_recipebook.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_recipeshoplist WHERE character_recipeshoplist.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_shortcuts WHERE character_shortcuts.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_skills WHERE character_skills.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_skills_save WHERE character_skills_save.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_subclasses WHERE character_subclasses.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_instance_time WHERE character_instance_time.charId NOT IN (SELECT charId FROM characters);"); - - // Items - cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id NOT IN (SELECT charId FROM characters) AND items.owner_id NOT IN (SELECT clan_id FROM clan_data) AND items.owner_id != -1;"); - cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id = -1 AND loc LIKE 'MAIL' AND loc_data NOT IN (SELECT messageId FROM messages WHERE senderId = -1);"); - cleanCount += statement.executeUpdate("DELETE FROM item_auction_bid WHERE item_auction_bid.playerObjId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM item_variations WHERE item_variations.itemId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_elementals WHERE item_elementals.itemId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_special_abilities WHERE item_special_abilities.objectId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_variables WHERE item_variables.id NOT IN (SELECT object_id FROM items);"); - - // Misc - cleanCount += statement.executeUpdate("DELETE FROM cursed_weapons WHERE cursed_weapons.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM heroes WHERE heroes.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles WHERE olympiad_nobles.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles_eom WHERE olympiad_nobles_eom.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM pets WHERE pets.item_obj_id NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM merchant_lease WHERE merchant_lease.player_id NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_reco_bonus WHERE character_reco_bonus.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.leader_id NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.clan_id NOT IN (SELECT clanid FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charOneId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charTwoId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM heroes_diary WHERE heroes_diary.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade WHERE character_offline_trade.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade_items WHERE character_offline_trade_items.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_tpbookmark WHERE character_tpbookmark.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_variables WHERE character_variables.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM bot_reported_char_data WHERE bot_reported_char_data.botId NOT IN (SELECT charId FROM characters);"); - - // Clan - cleanCount += statement.executeUpdate("DELETE FROM clan_privs WHERE clan_privs.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_skills WHERE clan_skills.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_subpledges WHERE clan_subpledges.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan1 NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan2 NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM siege_clans WHERE siege_clans.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_notices WHERE clan_notices.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM auction_bid WHERE auction_bid.bidderId NOT IN (SELECT clan_id FROM clan_data);"); - - // Forums - cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT clan_id FROM clan_data) AND forums.forum_parent=2;"); - cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT charId FROM characters) AND forums.forum_parent=3;"); - cleanCount += statement.executeUpdate("DELETE FROM posts WHERE posts.post_forum_id NOT IN (SELECT forum_id FROM forums);"); - cleanCount += statement.executeUpdate("DELETE FROM topic WHERE topic.topic_forum_id NOT IN (SELECT forum_id FROM forums);"); - - // Update needed items after cleaning has taken place. - statement.executeUpdate("UPDATE clan_data SET auction_bid_at = 0 WHERE auction_bid_at NOT IN (SELECT auctionId FROM auction_bid);"); - statement.executeUpdate("UPDATE clan_data SET new_leader_id = 0 WHERE new_leader_id <> 0 AND new_leader_id NOT IN (SELECT charId FROM characters);"); - statement.executeUpdate("UPDATE clan_subpledges SET leader_id=0 WHERE clan_subpledges.leader_id NOT IN (SELECT charId FROM characters) AND leader_id > 0;"); - statement.executeUpdate("UPDATE castle SET side='NEUTRAL' WHERE castle.id NOT IN (SELECT hasCastle FROM clan_data);"); - statement.executeUpdate("UPDATE characters SET clanid=0, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0, clan_join_expiry_time=0, clan_create_expiry_time=0 WHERE characters.clanid > 0 AND characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); - statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); - - LOGGER.info("IdFactory: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not clean up database: " + e); - } - } - - // Cleanup timestamps. - try (Connection con = DatabaseFactory.getConnection()) - { - int cleanCount = 0; - for (String line : TIMESTAMPS_CLEAN) - { - try (PreparedStatement statement = con.prepareStatement(line)) - { - statement.setLong(1, System.currentTimeMillis()); - cleanCount += statement.executeUpdate(); - } - } - LOGGER.info("IdFactory: Cleaned " + cleanCount + " expired timestamps from database."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not clean expired timestamps from database. " + e); - } - - // Initialize. - try - { - _freeIds = new BitSet(PrimeFinder.nextPrime(100000)); - _freeIds.clear(); - _freeIdCount = new AtomicInteger(FREE_OBJECT_ID_SIZE); - - // Collect already used ids. - final List usedIds = new ArrayList<>(); - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - String extractUsedObjectIdsQuery = ""; - for (String[] tblClmn : ID_EXTRACTS) - { - extractUsedObjectIdsQuery += "SELECT " + tblClmn[1] + " FROM " + tblClmn[0] + " UNION "; - } - extractUsedObjectIdsQuery = extractUsedObjectIdsQuery.substring(0, extractUsedObjectIdsQuery.length() - 7); // Remove the last " UNION " - try (ResultSet result = statement.executeQuery(extractUsedObjectIdsQuery)) - { - while (result.next()) - { - usedIds.add(result.getInt(1)); - } - } - } - Collections.sort(usedIds); - - // Register used ids. - for (int usedObjectId : usedIds) - { - final int objectId = usedObjectId - FIRST_OID; - if (objectId < 0) - { - LOGGER.warning("IdFactory: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); - continue; - } - _freeIds.set(usedObjectId - FIRST_OID); - _freeIdCount.decrementAndGet(); - } - - _nextFreeId = new AtomicInteger(_freeIds.nextClearBit(0)); - _initialized = true; - } - catch (Exception e) - { - _initialized = false; - LOGGER.severe("IdFactory: Could not be initialized properly: " + e.getMessage()); - } - - // Schedule increase capacity task. - ThreadPool.scheduleAtFixedRate(() -> - { - synchronized (_nextFreeId) - { - if (PrimeFinder.nextPrime((usedIdCount() * 11) / 10) > _freeIds.size()) - { - increaseBitSetCapacity(); - } - } - }, 30000, 30000); - - LOGGER.info("IdFactory: " + _freeIds.size() + " id's available."); - } - - public synchronized static void releaseId(int objectId) - { - synchronized (_nextFreeId) - { - if ((objectId - FIRST_OID) > -1) - { - _freeIds.clear(objectId - FIRST_OID); - _freeIdCount.incrementAndGet(); - } - else - { - LOGGER.warning("IdFactory: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); - } - } - } - - public synchronized static int getNextId() - { - synchronized (_nextFreeId) - { - final int newId = _nextFreeId.get(); - _freeIds.set(newId); - _freeIdCount.decrementAndGet(); - - final int nextFree = _freeIds.nextClearBit(newId) < 0 ? _freeIds.nextClearBit(0) : _freeIds.nextClearBit(newId); - if (nextFree < 0) - { - if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) - { - throw new NullPointerException("IdFactory: Ran out of valid ids."); - } - increaseBitSetCapacity(); - } - _nextFreeId.set(nextFree); - - return newId + FIRST_OID; - } - } - - private static void increaseBitSetCapacity() - { - final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); - newBitSet.or(_freeIds); - _freeIds = newBitSet; - } - - private static int usedIdCount() - { - return _freeIdCount.get() - FIRST_OID; - } - - public static int size() - { - return _freeIdCount.get(); - } - - public static boolean hasInitialized() - { - return _initialized; - } -} diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/instancemanager/IdManager.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/instancemanager/IdManager.java new file mode 100644 index 0000000000..d595a5befa --- /dev/null +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/instancemanager/IdManager.java @@ -0,0 +1,322 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.instancemanager; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.BitSet; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Logger; + +import org.l2jmobius.Config; +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.commons.database.DatabaseFactory; +import org.l2jmobius.gameserver.util.PrimeFinder; + +/** + * @author Mobius (reworked from L2J IdFactory) + */ +public class IdManager +{ + private static final Logger LOGGER = Logger.getLogger(IdManager.class.getName()); + + //@formatter:off + private static final String[][] ID_EXTRACTS = + { + {"characters","charId"}, + {"items","object_id"}, + {"clan_data","clan_id"}, + {"itemsonground","object_id"}, + {"messages","messageId"} + }; + //@formatter:on + + private static final String[] TIMESTAMPS_CLEAN = + { + "DELETE FROM character_instance_time WHERE time <= ?", + "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" + }; + + private static final int FIRST_OID = 0x10000000; + private static final int LAST_OID = 0x7FFFFFFF; + private static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; + + private static BitSet _freeIds; + private static AtomicInteger _freeIdCount; + private static AtomicInteger _nextFreeId; + private static boolean _initialized; + + public IdManager() + { + // Update characters online status. + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + statement.executeUpdate("UPDATE characters SET online = 0"); + LOGGER.info("Updated characters online status."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not update characters online status: " + e); + } + + // Cleanup database. + if (Config.DATABASE_CLEAN_UP) + { + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + final long cleanupStart = System.currentTimeMillis(); + int cleanCount = 0; + + // Characters + cleanCount += statement.executeUpdate("DELETE FROM account_gsdata WHERE account_gsdata.account_name NOT IN (SELECT account_name FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.contactId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.friendId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_hennas WHERE character_hennas.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_macroses WHERE character_macroses.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_quests WHERE character_quests.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_recipebook WHERE character_recipebook.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_recipeshoplist WHERE character_recipeshoplist.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_shortcuts WHERE character_shortcuts.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_skills WHERE character_skills.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_skills_save WHERE character_skills_save.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_subclasses WHERE character_subclasses.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_instance_time WHERE character_instance_time.charId NOT IN (SELECT charId FROM characters);"); + + // Items + cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id NOT IN (SELECT charId FROM characters) AND items.owner_id NOT IN (SELECT clan_id FROM clan_data) AND items.owner_id != -1;"); + cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id = -1 AND loc LIKE 'MAIL' AND loc_data NOT IN (SELECT messageId FROM messages WHERE senderId = -1);"); + cleanCount += statement.executeUpdate("DELETE FROM item_auction_bid WHERE item_auction_bid.playerObjId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM item_variations WHERE item_variations.itemId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_elementals WHERE item_elementals.itemId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_special_abilities WHERE item_special_abilities.objectId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_variables WHERE item_variables.id NOT IN (SELECT object_id FROM items);"); + + // Misc + cleanCount += statement.executeUpdate("DELETE FROM cursed_weapons WHERE cursed_weapons.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM heroes WHERE heroes.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles WHERE olympiad_nobles.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles_eom WHERE olympiad_nobles_eom.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM pets WHERE pets.item_obj_id NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM merchant_lease WHERE merchant_lease.player_id NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_reco_bonus WHERE character_reco_bonus.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.leader_id NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.clan_id NOT IN (SELECT clanid FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charOneId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charTwoId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM heroes_diary WHERE heroes_diary.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade WHERE character_offline_trade.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade_items WHERE character_offline_trade_items.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_tpbookmark WHERE character_tpbookmark.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_variables WHERE character_variables.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM bot_reported_char_data WHERE bot_reported_char_data.botId NOT IN (SELECT charId FROM characters);"); + + // Clan + cleanCount += statement.executeUpdate("DELETE FROM clan_privs WHERE clan_privs.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_skills WHERE clan_skills.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_subpledges WHERE clan_subpledges.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan1 NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan2 NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM siege_clans WHERE siege_clans.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_notices WHERE clan_notices.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM auction_bid WHERE auction_bid.bidderId NOT IN (SELECT clan_id FROM clan_data);"); + + // Forums + cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT clan_id FROM clan_data) AND forums.forum_parent=2;"); + cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT charId FROM characters) AND forums.forum_parent=3;"); + cleanCount += statement.executeUpdate("DELETE FROM posts WHERE posts.post_forum_id NOT IN (SELECT forum_id FROM forums);"); + cleanCount += statement.executeUpdate("DELETE FROM topic WHERE topic.topic_forum_id NOT IN (SELECT forum_id FROM forums);"); + + // Update needed items after cleaning has taken place. + statement.executeUpdate("UPDATE clan_data SET auction_bid_at = 0 WHERE auction_bid_at NOT IN (SELECT auctionId FROM auction_bid);"); + statement.executeUpdate("UPDATE clan_data SET new_leader_id = 0 WHERE new_leader_id <> 0 AND new_leader_id NOT IN (SELECT charId FROM characters);"); + statement.executeUpdate("UPDATE clan_subpledges SET leader_id=0 WHERE clan_subpledges.leader_id NOT IN (SELECT charId FROM characters) AND leader_id > 0;"); + statement.executeUpdate("UPDATE castle SET side='NEUTRAL' WHERE castle.id NOT IN (SELECT hasCastle FROM clan_data);"); + statement.executeUpdate("UPDATE characters SET clanid=0, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0, clan_join_expiry_time=0, clan_create_expiry_time=0 WHERE characters.clanid > 0 AND characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); + statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); + + LOGGER.info("IdManager: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not clean up database: " + e); + } + } + + // Cleanup timestamps. + try (Connection con = DatabaseFactory.getConnection()) + { + int cleanCount = 0; + for (String line : TIMESTAMPS_CLEAN) + { + try (PreparedStatement statement = con.prepareStatement(line)) + { + statement.setLong(1, System.currentTimeMillis()); + cleanCount += statement.executeUpdate(); + } + } + LOGGER.info("IdManager: Cleaned " + cleanCount + " expired timestamps from database."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not clean expired timestamps from database. " + e); + } + + // Initialize. + try + { + _freeIds = new BitSet(PrimeFinder.nextPrime(100000)); + _freeIds.clear(); + _freeIdCount = new AtomicInteger(FREE_OBJECT_ID_SIZE); + + // Collect already used ids. + final List usedIds = new ArrayList<>(); + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + String extractUsedObjectIdsQuery = ""; + for (String[] tblClmn : ID_EXTRACTS) + { + extractUsedObjectIdsQuery += "SELECT " + tblClmn[1] + " FROM " + tblClmn[0] + " UNION "; + } + extractUsedObjectIdsQuery = extractUsedObjectIdsQuery.substring(0, extractUsedObjectIdsQuery.length() - 7); // Remove the last " UNION " + try (ResultSet result = statement.executeQuery(extractUsedObjectIdsQuery)) + { + while (result.next()) + { + usedIds.add(result.getInt(1)); + } + } + } + Collections.sort(usedIds); + + // Register used ids. + for (int usedObjectId : usedIds) + { + final int objectId = usedObjectId - FIRST_OID; + if (objectId < 0) + { + LOGGER.warning("IdManager: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); + continue; + } + _freeIds.set(usedObjectId - FIRST_OID); + _freeIdCount.decrementAndGet(); + } + + _nextFreeId = new AtomicInteger(_freeIds.nextClearBit(0)); + _initialized = true; + } + catch (Exception e) + { + _initialized = false; + LOGGER.severe("IdManager: Could not be initialized properly: " + e.getMessage()); + } + + // Schedule increase capacity task. + ThreadPool.scheduleAtFixedRate(() -> + { + synchronized (_nextFreeId) + { + if (PrimeFinder.nextPrime((usedIdCount() * 11) / 10) > _freeIds.size()) + { + increaseBitSetCapacity(); + } + } + }, 30000, 30000); + + LOGGER.info("IdManager: " + _freeIds.size() + " id's available."); + } + + public void releaseId(int objectId) + { + synchronized (_nextFreeId) + { + if ((objectId - FIRST_OID) > -1) + { + _freeIds.clear(objectId - FIRST_OID); + _freeIdCount.incrementAndGet(); + } + else + { + LOGGER.warning("IdManager: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); + } + } + } + + public int getNextId() + { + synchronized (_nextFreeId) + { + final int newId = _nextFreeId.get(); + _freeIds.set(newId); + _freeIdCount.decrementAndGet(); + + final int nextFree = _freeIds.nextClearBit(newId) < 0 ? _freeIds.nextClearBit(0) : _freeIds.nextClearBit(newId); + if (nextFree < 0) + { + if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) + { + throw new NullPointerException("IdManager: Ran out of valid ids."); + } + increaseBitSetCapacity(); + } + _nextFreeId.set(nextFree); + + return newId + FIRST_OID; + } + } + + private void increaseBitSetCapacity() + { + final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); + newBitSet.or(_freeIds); + _freeIds = newBitSet; + } + + private int usedIdCount() + { + return _freeIdCount.get() - FIRST_OID; + } + + public static int size() + { + return _freeIdCount.get(); + } + + public static boolean hasInitialized() + { + return _initialized; + } + + public static IdManager getInstance() + { + return SingletonHolder.INSTANCE; + } + + private static class SingletonHolder + { + protected static final IdManager INSTANCE = new IdManager(); + } +} diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/instancemanager/MailManager.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/instancemanager/MailManager.java index 176b407caa..2a82541b39 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/instancemanager/MailManager.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/instancemanager/MailManager.java @@ -31,7 +31,6 @@ import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.entity.Message; @@ -277,7 +276,7 @@ public class MailManager } _messages.remove(msgId); - IdFactory.releaseId(msgId); + IdManager.getInstance().releaseId(msgId); } /** diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/Petition.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/Petition.java index 0c1524f59b..b19b6f9025 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/Petition.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/Petition.java @@ -21,7 +21,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.PetitionState; import org.l2jmobius.gameserver.enums.PetitionType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.PetitionManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -47,7 +47,7 @@ public class Petition public Petition(PlayerInstance petitioner, String petitionText, int petitionType) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _type = PetitionType.values()[petitionType - 1]; _content = petitionText; _petitioner = petitioner; diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/WorldObject.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/WorldObject.java index 18e793a718..3b8f7fb5fb 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/WorldObject.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/WorldObject.java @@ -24,7 +24,7 @@ import org.l2jmobius.gameserver.handler.ActionHandler; import org.l2jmobius.gameserver.handler.ActionShiftHandler; import org.l2jmobius.gameserver.handler.IActionHandler; import org.l2jmobius.gameserver.handler.IActionShiftHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; @@ -154,8 +154,8 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif public void refreshId() { World.getInstance().removeObject(this); - IdFactory.releaseId(getObjectId()); - _objectId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(getObjectId()); + _objectId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Creature.java index de007f3b17..8acdcc082c 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -63,7 +63,7 @@ import org.l2jmobius.gameserver.enums.Team; import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MapRegionManager; import org.l2jmobius.gameserver.instancemanager.QuestManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; @@ -288,7 +288,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public Creature(CreatureTemplate template) { - this(IdFactory.getNextId(), template); + this(IdManager.getInstance().getNextId(), template); } /** diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java index d132ad18fc..12209da801 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java @@ -20,7 +20,7 @@ import java.util.concurrent.Future; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.gameserver.enums.InstanceType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.stat.ControllableAirShipStat; import org.l2jmobius.gameserver.model.actor.templates.CreatureTemplate; import org.l2jmobius.gameserver.model.skills.AbnormalType; @@ -48,7 +48,7 @@ public class ControllableAirShipInstance extends AirShipInstance super(template); setInstanceType(InstanceType.ControllableAirShipInstance); _ownerId = ownerId; - _helmId = IdFactory.getNextId(); // not forget to release ! + _helmId = IdManager.getInstance().getNextId(); // not forget to release ! } @Override @@ -282,8 +282,8 @@ public class ControllableAirShipInstance extends AirShipInstance public void refreshId() { super.refreshId(); - IdFactory.releaseId(_helmId); - _helmId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(_helmId); + _helmId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java index 48c52c920f..c8412e68be 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.actor.instance; import org.l2jmobius.gameserver.data.xml.impl.FenceData; import org.l2jmobius.gameserver.enums.FenceState; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; @@ -44,7 +44,7 @@ public class FenceInstance extends WorldObject public FenceInstance(int x, int y, String name, int width, int length, int height, FenceState state) { - super(IdFactory.getNextId()); + super(IdManager.getInstance().getNextId()); _xMin = x - (width / 2); _xMax = x + (width / 2); @@ -59,7 +59,7 @@ public class FenceInstance extends WorldObject _heightFences = new int[height - 1]; for (int i = 0; i < _heightFences.length; i++) { - _heightFences[i] = IdFactory.getNextId(); + _heightFences[i] = IdManager.getInstance().getNextId(); } } } diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 71a12ae14c..d749b1d7a6 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -107,7 +107,6 @@ import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; import org.l2jmobius.gameserver.handler.IItemHandler; import org.l2jmobius.gameserver.handler.ItemHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CursedWeaponsManager; @@ -116,6 +115,7 @@ import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.HandysBlockCheckerManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager; import org.l2jmobius.gameserver.instancemanager.MentorManager; @@ -1152,7 +1152,7 @@ public class PlayerInstance extends Playable */ private PlayerInstance(PlayerTemplate template, String accountName, PlayerAppearance app) { - this(IdFactory.getNextId(), template, accountName, app); + this(IdManager.getInstance().getNextId(), template, accountName, app); } @Override diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java index 0564bbbe5e..b493b68bcc 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java @@ -21,7 +21,7 @@ import java.util.Locale; import org.l2jmobius.Config; import org.l2jmobius.commons.util.StringUtil; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.HistoryInfo; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.RaceState; @@ -160,7 +160,7 @@ public class RaceManagerInstance extends Npc player.setRace(0, 0); player.setRace(1, 0); - ItemInstance item = new ItemInstance(IdFactory.getNextId(), 4443); + ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 4443); item.setCount(1); item.setEnchantLevel(MonsterRace.getInstance().getRaceNumber()); item.setCustomType1(ticket); diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java index 6762897720..929d68a27f 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.announce; import java.util.Date; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.script.DateRange; /** @@ -32,7 +32,7 @@ public class EventAnnouncement implements IAnnouncement public EventAnnouncement(DateRange range, String content) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _range = range; _content = content; } @@ -88,7 +88,7 @@ public class EventAnnouncement implements IAnnouncement @Override public boolean deleteMe() { - IdFactory.releaseId(_id); + IdManager.getInstance().releaseId(_id); return true; } diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/entity/Couple.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/entity/Couple.java index 6897b8d681..54104ff7ab 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/entity/Couple.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/entity/Couple.java @@ -24,7 +24,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; /** @@ -85,7 +85,7 @@ public class Couple try (Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO mods_wedding (id, player1Id, player2Id, married, affianceDate, weddingDate) VALUES (?, ?, ?, ?, ?, ?)")) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); ps.setInt(1, _id); ps.setInt(2, _player1Id); ps.setInt(3, _player2Id); diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/entity/Message.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/entity/Message.java index 1b0ebe1d93..9002ebdc1a 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/entity/Message.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/entity/Message.java @@ -24,7 +24,7 @@ import java.sql.SQLException; import org.l2jmobius.gameserver.data.sql.impl.CharNameTable; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MailManager; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -99,7 +99,7 @@ public class Message */ public Message(int senderId, int receiverId, boolean isCod, String subject, String text, long reqAdena) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -118,7 +118,7 @@ public class Message */ public Message(int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = subject; @@ -138,7 +138,7 @@ public class Message */ public Message(int senderId, int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -157,7 +157,7 @@ public class Message */ public Message(Message msg) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = msg.getSenderId(); _receiverId = msg.getSenderId(); _subject = ""; @@ -177,7 +177,7 @@ public class Message public Message(int receiverId, ItemInstance item, MailType mailType) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = ""; diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java index e1e27e6111..800fb576c7 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java @@ -17,7 +17,7 @@ package org.l2jmobius.gameserver.model.itemauction; import org.l2jmobius.gameserver.datatables.ItemTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -78,7 +78,7 @@ public class AuctionItem public ItemInstance createNewItemInstance() { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), _itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), _itemId); World.getInstance().addObject(item); item.setCount(_itemCount); item.setEnchantLevel(item.getItem().getDefaultEnchantLevel()); diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 48384d77b9..54b8a4d2b6 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -47,8 +47,8 @@ import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemSkillType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.CastleManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.SiegeGuardManager; import org.l2jmobius.gameserver.model.DropProtection; @@ -262,7 +262,7 @@ public class ItemInstance extends WorldObject */ public ItemInstance(int itemId) { - this(IdFactory.getNextId(), itemId); + this(IdManager.getInstance().getNextId(), itemId); } /** diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java index ee2437143a..7fa54aa75e 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java @@ -16,7 +16,7 @@ */ package org.l2jmobius.gameserver.model.zone; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -50,7 +50,7 @@ public abstract class ZoneForm protected final void dropDebugItem(int itemId, int num, int x, int y, int z) { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); item.setCount(num); item.spawnMe(x, y, z + 5); ZoneManager.getInstance().getDebugItems().add(item); diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/GameServer.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/GameServer.java index 4238338dcd..00f10da6ff 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/GameServer.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/GameServer.java @@ -109,7 +109,6 @@ import org.l2jmobius.gameserver.handler.ConditionHandler; import org.l2jmobius.gameserver.handler.DailyMissionHandler; import org.l2jmobius.gameserver.handler.EffectHandler; import org.l2jmobius.gameserver.handler.SkillConditionHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AirShipManager; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.BoatManager; @@ -128,6 +127,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.GraciaSeedsManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.instancemanager.ItemAuctionManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; @@ -211,9 +211,9 @@ public class GameServer printSection("ThreadPool"); ThreadPool.init(); - printSection("IdFactory"); - IdFactory.init(); - if (!IdFactory.hasInitialized()) + printSection("IdManager"); + IdManager.getInstance(); + if (!IdManager.hasInitialized()) { LOGGER.severe(getClass().getSimpleName() + ": Could not read object IDs from database. Please check your configuration."); throw new Exception("Could not initialize the ID factory!"); @@ -431,7 +431,7 @@ public class GameServer Runtime.getRuntime().addShutdownHook(Shutdown.getInstance()); - LOGGER.info("IdFactory: Free ObjectID's remaining: " + IdFactory.size()); + LOGGER.info("IdManager: Free ObjectID's remaining: " + IdManager.size()); if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS) { diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java index 0929ab7f5f..f80750ae97 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java @@ -35,10 +35,10 @@ import org.l2jmobius.gameserver.communitybbs.Manager.ForumsBBSManager; import org.l2jmobius.gameserver.data.xml.impl.ClanHallData; import org.l2jmobius.gameserver.enums.ClanWarState; import org.l2jmobius.gameserver.enums.UserInfoType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.ClanEntryManager; import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.SiegeManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -196,7 +196,7 @@ public class ClanTable return null; } - final Clan clan = new Clan(IdFactory.getNextId(), clanName); + final Clan clan = new Clan(IdManager.getInstance().getNextId(), clanName); final ClanMember leader = new ClanMember(clan, player); clan.setLeader(leader); leader.setPlayerInstance(player); @@ -271,7 +271,7 @@ public class ClanTable } _clans.remove(clanId); - IdFactory.releaseId(clanId); + IdManager.getInstance().releaseId(clanId); try (Connection con = DatabaseFactory.getConnection()) { diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/datatables/ItemTable.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/datatables/ItemTable.java index ffbc08a6d9..da12c37a86 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/datatables/ItemTable.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/datatables/ItemTable.java @@ -34,7 +34,7 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.data.xml.impl.EnchantItemHPBonusData; import org.l2jmobius.gameserver.engines.DocumentEngine; import org.l2jmobius.gameserver.enums.ItemLocation; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Attackable; @@ -212,7 +212,7 @@ public class ItemTable public ItemInstance createItem(String process, int itemId, long count, Creature actor, Object reference) { // Create and Init the ItemInstance corresponding to the Item Identifier - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); if (process.equalsIgnoreCase("loot") && !Config.AUTO_LOOT_ITEM_IDS.contains(itemId)) { ScheduledFuture itemLootShedule; @@ -330,7 +330,7 @@ public class ItemTable item.setLastChange(ItemInstance.REMOVED); World.getInstance().removeObject(item); - IdFactory.releaseId(item.getObjectId()); + IdManager.getInstance().releaseId(item.getObjectId()); if (Config.LOG_ITEMS) { diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/idfactory/IdFactory.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/idfactory/IdFactory.java deleted file mode 100644 index d4447a7dea..0000000000 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/idfactory/IdFactory.java +++ /dev/null @@ -1,337 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.l2jmobius.gameserver.idfactory; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.BitSet; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.logging.Logger; - -import org.l2jmobius.Config; -import org.l2jmobius.commons.concurrent.ThreadPool; -import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.util.PrimeFinder; - -/** - * @author Mobius (reworked from L2J version) - */ -public abstract class IdFactory -{ - private static final Logger LOGGER = Logger.getLogger(IdFactory.class.getName()); - - protected static final String[] ID_CHECKS = - { - "SELECT owner_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT object_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT charId FROM character_quests WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_contacts WHERE charId >= ? AND charId < ?", - "SELECT contactId FROM character_contacts WHERE contactId >= ? AND contactId < ?", - "SELECT charId FROM character_friends WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_friends WHERE friendId >= ? AND friendId < ?", - "SELECT charId FROM character_hennas WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipebook WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipeshoplist WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_shortcuts WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_macroses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills_save WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_subclasses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM characters WHERE charId >= ? AND charId < ?", - "SELECT clanid FROM characters WHERE clanid >= ? AND clanid < ?", - "SELECT clan_id FROM clan_data WHERE clan_id >= ? AND clan_id < ?", - "SELECT clan_id FROM siege_clans WHERE clan_id >= ? AND clan_id < ?", - "SELECT ally_id FROM clan_data WHERE ally_id >= ? AND ally_id < ?", - "SELECT leader_id FROM clan_data WHERE leader_id >= ? AND leader_id < ?", - "SELECT item_obj_id FROM pets WHERE item_obj_id >= ? AND item_obj_id < ?", - "SELECT object_id FROM itemsonground WHERE object_id >= ? AND object_id < ?", - "SELECT summonId FROM characters_summons WHERE summonId >= ? AND summonId < ?" - }; - //@formatter:off - private static final String[][] ID_EXTRACTS = - { - {"characters","charId"}, - {"items","object_id"}, - {"clan_data","clan_id"}, - {"itemsonground","object_id"}, - {"messages","messageId"} - }; - //@formatter:on - private static final String[] TIMESTAMPS_CLEAN = - { - "DELETE FROM character_instance_time WHERE time <= ?", - "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" - }; - public static final int FIRST_OID = 0x10000000; - public static final int LAST_OID = 0x7FFFFFFF; - public static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; - - private static BitSet _freeIds; - private static AtomicInteger _freeIdCount; - private static AtomicInteger _nextFreeId; - private static boolean _initialized; - - public static void init() - { - // Update characters online status. - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - statement.executeUpdate("UPDATE characters SET online = 0"); - LOGGER.info("Updated characters online status."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not update characters online status: " + e); - } - - // Cleanup database. - if (Config.DATABASE_CLEAN_UP) - { - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - final long cleanupStart = System.currentTimeMillis(); - int cleanCount = 0; - - // Characters - cleanCount += statement.executeUpdate("DELETE FROM account_gsdata WHERE account_gsdata.account_name NOT IN (SELECT account_name FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.contactId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.friendId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_hennas WHERE character_hennas.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_macroses WHERE character_macroses.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_quests WHERE character_quests.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_recipebook WHERE character_recipebook.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_recipeshoplist WHERE character_recipeshoplist.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_shortcuts WHERE character_shortcuts.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_skills WHERE character_skills.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_skills_save WHERE character_skills_save.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_subclasses WHERE character_subclasses.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_instance_time WHERE character_instance_time.charId NOT IN (SELECT charId FROM characters);"); - - // Items - cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id NOT IN (SELECT charId FROM characters) AND items.owner_id NOT IN (SELECT clan_id FROM clan_data) AND items.owner_id != -1;"); - cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id = -1 AND loc LIKE 'MAIL' AND loc_data NOT IN (SELECT messageId FROM messages WHERE senderId = -1);"); - cleanCount += statement.executeUpdate("DELETE FROM item_auction_bid WHERE item_auction_bid.playerObjId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM item_variations WHERE item_variations.itemId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_elementals WHERE item_elementals.itemId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_special_abilities WHERE item_special_abilities.objectId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_variables WHERE item_variables.id NOT IN (SELECT object_id FROM items);"); - - // Misc - cleanCount += statement.executeUpdate("DELETE FROM cursed_weapons WHERE cursed_weapons.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM heroes WHERE heroes.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles WHERE olympiad_nobles.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles_eom WHERE olympiad_nobles_eom.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM pets WHERE pets.item_obj_id NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM merchant_lease WHERE merchant_lease.player_id NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_reco_bonus WHERE character_reco_bonus.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.leader_id NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.clan_id NOT IN (SELECT clanid FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charOneId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charTwoId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM heroes_diary WHERE heroes_diary.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade WHERE character_offline_trade.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade_items WHERE character_offline_trade_items.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_tpbookmark WHERE character_tpbookmark.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_variables WHERE character_variables.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM bot_reported_char_data WHERE bot_reported_char_data.botId NOT IN (SELECT charId FROM characters);"); - - // Clan - cleanCount += statement.executeUpdate("DELETE FROM clan_privs WHERE clan_privs.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_skills WHERE clan_skills.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_subpledges WHERE clan_subpledges.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan1 NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan2 NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM siege_clans WHERE siege_clans.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_notices WHERE clan_notices.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM auction_bid WHERE auction_bid.bidderId NOT IN (SELECT clan_id FROM clan_data);"); - - // Forums - cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT clan_id FROM clan_data) AND forums.forum_parent=2;"); - cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT charId FROM characters) AND forums.forum_parent=3;"); - cleanCount += statement.executeUpdate("DELETE FROM posts WHERE posts.post_forum_id NOT IN (SELECT forum_id FROM forums);"); - cleanCount += statement.executeUpdate("DELETE FROM topic WHERE topic.topic_forum_id NOT IN (SELECT forum_id FROM forums);"); - - // Update needed items after cleaning has taken place. - statement.executeUpdate("UPDATE clan_data SET auction_bid_at = 0 WHERE auction_bid_at NOT IN (SELECT auctionId FROM auction_bid);"); - statement.executeUpdate("UPDATE clan_data SET new_leader_id = 0 WHERE new_leader_id <> 0 AND new_leader_id NOT IN (SELECT charId FROM characters);"); - statement.executeUpdate("UPDATE clan_subpledges SET leader_id=0 WHERE clan_subpledges.leader_id NOT IN (SELECT charId FROM characters) AND leader_id > 0;"); - statement.executeUpdate("UPDATE castle SET side='NEUTRAL' WHERE castle.id NOT IN (SELECT hasCastle FROM clan_data);"); - statement.executeUpdate("UPDATE characters SET clanid=0, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0, clan_join_expiry_time=0, clan_create_expiry_time=0 WHERE characters.clanid > 0 AND characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); - statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); - - LOGGER.info("IdFactory: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not clean up database: " + e); - } - } - - // Cleanup timestamps. - try (Connection con = DatabaseFactory.getConnection()) - { - int cleanCount = 0; - for (String line : TIMESTAMPS_CLEAN) - { - try (PreparedStatement statement = con.prepareStatement(line)) - { - statement.setLong(1, System.currentTimeMillis()); - cleanCount += statement.executeUpdate(); - } - } - LOGGER.info("IdFactory: Cleaned " + cleanCount + " expired timestamps from database."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not clean expired timestamps from database. " + e); - } - - // Initialize. - try - { - _freeIds = new BitSet(PrimeFinder.nextPrime(100000)); - _freeIds.clear(); - _freeIdCount = new AtomicInteger(FREE_OBJECT_ID_SIZE); - - // Collect already used ids. - final List usedIds = new ArrayList<>(); - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - String extractUsedObjectIdsQuery = ""; - for (String[] tblClmn : ID_EXTRACTS) - { - extractUsedObjectIdsQuery += "SELECT " + tblClmn[1] + " FROM " + tblClmn[0] + " UNION "; - } - extractUsedObjectIdsQuery = extractUsedObjectIdsQuery.substring(0, extractUsedObjectIdsQuery.length() - 7); // Remove the last " UNION " - try (ResultSet result = statement.executeQuery(extractUsedObjectIdsQuery)) - { - while (result.next()) - { - usedIds.add(result.getInt(1)); - } - } - } - Collections.sort(usedIds); - - // Register used ids. - for (int usedObjectId : usedIds) - { - final int objectId = usedObjectId - FIRST_OID; - if (objectId < 0) - { - LOGGER.warning("IdFactory: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); - continue; - } - _freeIds.set(usedObjectId - FIRST_OID); - _freeIdCount.decrementAndGet(); - } - - _nextFreeId = new AtomicInteger(_freeIds.nextClearBit(0)); - _initialized = true; - } - catch (Exception e) - { - _initialized = false; - LOGGER.severe("IdFactory: Could not be initialized properly: " + e.getMessage()); - } - - // Schedule increase capacity task. - ThreadPool.scheduleAtFixedRate(() -> - { - synchronized (_nextFreeId) - { - if (PrimeFinder.nextPrime((usedIdCount() * 11) / 10) > _freeIds.size()) - { - increaseBitSetCapacity(); - } - } - }, 30000, 30000); - - LOGGER.info("IdFactory: " + _freeIds.size() + " id's available."); - } - - public synchronized static void releaseId(int objectId) - { - synchronized (_nextFreeId) - { - if ((objectId - FIRST_OID) > -1) - { - _freeIds.clear(objectId - FIRST_OID); - _freeIdCount.incrementAndGet(); - } - else - { - LOGGER.warning("IdFactory: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); - } - } - } - - public synchronized static int getNextId() - { - synchronized (_nextFreeId) - { - final int newId = _nextFreeId.get(); - _freeIds.set(newId); - _freeIdCount.decrementAndGet(); - - final int nextFree = _freeIds.nextClearBit(newId) < 0 ? _freeIds.nextClearBit(0) : _freeIds.nextClearBit(newId); - if (nextFree < 0) - { - if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) - { - throw new NullPointerException("IdFactory: Ran out of valid ids."); - } - increaseBitSetCapacity(); - } - _nextFreeId.set(nextFree); - - return newId + FIRST_OID; - } - } - - private static void increaseBitSetCapacity() - { - final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); - newBitSet.or(_freeIds); - _freeIds = newBitSet; - } - - private static int usedIdCount() - { - return _freeIdCount.get() - FIRST_OID; - } - - public static int size() - { - return _freeIdCount.get(); - } - - public static boolean hasInitialized() - { - return _initialized; - } -} diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/instancemanager/IdManager.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/instancemanager/IdManager.java new file mode 100644 index 0000000000..d595a5befa --- /dev/null +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/instancemanager/IdManager.java @@ -0,0 +1,322 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.instancemanager; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.BitSet; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Logger; + +import org.l2jmobius.Config; +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.commons.database.DatabaseFactory; +import org.l2jmobius.gameserver.util.PrimeFinder; + +/** + * @author Mobius (reworked from L2J IdFactory) + */ +public class IdManager +{ + private static final Logger LOGGER = Logger.getLogger(IdManager.class.getName()); + + //@formatter:off + private static final String[][] ID_EXTRACTS = + { + {"characters","charId"}, + {"items","object_id"}, + {"clan_data","clan_id"}, + {"itemsonground","object_id"}, + {"messages","messageId"} + }; + //@formatter:on + + private static final String[] TIMESTAMPS_CLEAN = + { + "DELETE FROM character_instance_time WHERE time <= ?", + "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" + }; + + private static final int FIRST_OID = 0x10000000; + private static final int LAST_OID = 0x7FFFFFFF; + private static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; + + private static BitSet _freeIds; + private static AtomicInteger _freeIdCount; + private static AtomicInteger _nextFreeId; + private static boolean _initialized; + + public IdManager() + { + // Update characters online status. + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + statement.executeUpdate("UPDATE characters SET online = 0"); + LOGGER.info("Updated characters online status."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not update characters online status: " + e); + } + + // Cleanup database. + if (Config.DATABASE_CLEAN_UP) + { + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + final long cleanupStart = System.currentTimeMillis(); + int cleanCount = 0; + + // Characters + cleanCount += statement.executeUpdate("DELETE FROM account_gsdata WHERE account_gsdata.account_name NOT IN (SELECT account_name FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.contactId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.friendId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_hennas WHERE character_hennas.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_macroses WHERE character_macroses.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_quests WHERE character_quests.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_recipebook WHERE character_recipebook.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_recipeshoplist WHERE character_recipeshoplist.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_shortcuts WHERE character_shortcuts.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_skills WHERE character_skills.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_skills_save WHERE character_skills_save.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_subclasses WHERE character_subclasses.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_instance_time WHERE character_instance_time.charId NOT IN (SELECT charId FROM characters);"); + + // Items + cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id NOT IN (SELECT charId FROM characters) AND items.owner_id NOT IN (SELECT clan_id FROM clan_data) AND items.owner_id != -1;"); + cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id = -1 AND loc LIKE 'MAIL' AND loc_data NOT IN (SELECT messageId FROM messages WHERE senderId = -1);"); + cleanCount += statement.executeUpdate("DELETE FROM item_auction_bid WHERE item_auction_bid.playerObjId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM item_variations WHERE item_variations.itemId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_elementals WHERE item_elementals.itemId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_special_abilities WHERE item_special_abilities.objectId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_variables WHERE item_variables.id NOT IN (SELECT object_id FROM items);"); + + // Misc + cleanCount += statement.executeUpdate("DELETE FROM cursed_weapons WHERE cursed_weapons.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM heroes WHERE heroes.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles WHERE olympiad_nobles.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles_eom WHERE olympiad_nobles_eom.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM pets WHERE pets.item_obj_id NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM merchant_lease WHERE merchant_lease.player_id NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_reco_bonus WHERE character_reco_bonus.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.leader_id NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.clan_id NOT IN (SELECT clanid FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charOneId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charTwoId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM heroes_diary WHERE heroes_diary.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade WHERE character_offline_trade.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade_items WHERE character_offline_trade_items.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_tpbookmark WHERE character_tpbookmark.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_variables WHERE character_variables.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM bot_reported_char_data WHERE bot_reported_char_data.botId NOT IN (SELECT charId FROM characters);"); + + // Clan + cleanCount += statement.executeUpdate("DELETE FROM clan_privs WHERE clan_privs.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_skills WHERE clan_skills.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_subpledges WHERE clan_subpledges.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan1 NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan2 NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM siege_clans WHERE siege_clans.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_notices WHERE clan_notices.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM auction_bid WHERE auction_bid.bidderId NOT IN (SELECT clan_id FROM clan_data);"); + + // Forums + cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT clan_id FROM clan_data) AND forums.forum_parent=2;"); + cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT charId FROM characters) AND forums.forum_parent=3;"); + cleanCount += statement.executeUpdate("DELETE FROM posts WHERE posts.post_forum_id NOT IN (SELECT forum_id FROM forums);"); + cleanCount += statement.executeUpdate("DELETE FROM topic WHERE topic.topic_forum_id NOT IN (SELECT forum_id FROM forums);"); + + // Update needed items after cleaning has taken place. + statement.executeUpdate("UPDATE clan_data SET auction_bid_at = 0 WHERE auction_bid_at NOT IN (SELECT auctionId FROM auction_bid);"); + statement.executeUpdate("UPDATE clan_data SET new_leader_id = 0 WHERE new_leader_id <> 0 AND new_leader_id NOT IN (SELECT charId FROM characters);"); + statement.executeUpdate("UPDATE clan_subpledges SET leader_id=0 WHERE clan_subpledges.leader_id NOT IN (SELECT charId FROM characters) AND leader_id > 0;"); + statement.executeUpdate("UPDATE castle SET side='NEUTRAL' WHERE castle.id NOT IN (SELECT hasCastle FROM clan_data);"); + statement.executeUpdate("UPDATE characters SET clanid=0, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0, clan_join_expiry_time=0, clan_create_expiry_time=0 WHERE characters.clanid > 0 AND characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); + statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); + + LOGGER.info("IdManager: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not clean up database: " + e); + } + } + + // Cleanup timestamps. + try (Connection con = DatabaseFactory.getConnection()) + { + int cleanCount = 0; + for (String line : TIMESTAMPS_CLEAN) + { + try (PreparedStatement statement = con.prepareStatement(line)) + { + statement.setLong(1, System.currentTimeMillis()); + cleanCount += statement.executeUpdate(); + } + } + LOGGER.info("IdManager: Cleaned " + cleanCount + " expired timestamps from database."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not clean expired timestamps from database. " + e); + } + + // Initialize. + try + { + _freeIds = new BitSet(PrimeFinder.nextPrime(100000)); + _freeIds.clear(); + _freeIdCount = new AtomicInteger(FREE_OBJECT_ID_SIZE); + + // Collect already used ids. + final List usedIds = new ArrayList<>(); + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + String extractUsedObjectIdsQuery = ""; + for (String[] tblClmn : ID_EXTRACTS) + { + extractUsedObjectIdsQuery += "SELECT " + tblClmn[1] + " FROM " + tblClmn[0] + " UNION "; + } + extractUsedObjectIdsQuery = extractUsedObjectIdsQuery.substring(0, extractUsedObjectIdsQuery.length() - 7); // Remove the last " UNION " + try (ResultSet result = statement.executeQuery(extractUsedObjectIdsQuery)) + { + while (result.next()) + { + usedIds.add(result.getInt(1)); + } + } + } + Collections.sort(usedIds); + + // Register used ids. + for (int usedObjectId : usedIds) + { + final int objectId = usedObjectId - FIRST_OID; + if (objectId < 0) + { + LOGGER.warning("IdManager: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); + continue; + } + _freeIds.set(usedObjectId - FIRST_OID); + _freeIdCount.decrementAndGet(); + } + + _nextFreeId = new AtomicInteger(_freeIds.nextClearBit(0)); + _initialized = true; + } + catch (Exception e) + { + _initialized = false; + LOGGER.severe("IdManager: Could not be initialized properly: " + e.getMessage()); + } + + // Schedule increase capacity task. + ThreadPool.scheduleAtFixedRate(() -> + { + synchronized (_nextFreeId) + { + if (PrimeFinder.nextPrime((usedIdCount() * 11) / 10) > _freeIds.size()) + { + increaseBitSetCapacity(); + } + } + }, 30000, 30000); + + LOGGER.info("IdManager: " + _freeIds.size() + " id's available."); + } + + public void releaseId(int objectId) + { + synchronized (_nextFreeId) + { + if ((objectId - FIRST_OID) > -1) + { + _freeIds.clear(objectId - FIRST_OID); + _freeIdCount.incrementAndGet(); + } + else + { + LOGGER.warning("IdManager: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); + } + } + } + + public int getNextId() + { + synchronized (_nextFreeId) + { + final int newId = _nextFreeId.get(); + _freeIds.set(newId); + _freeIdCount.decrementAndGet(); + + final int nextFree = _freeIds.nextClearBit(newId) < 0 ? _freeIds.nextClearBit(0) : _freeIds.nextClearBit(newId); + if (nextFree < 0) + { + if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) + { + throw new NullPointerException("IdManager: Ran out of valid ids."); + } + increaseBitSetCapacity(); + } + _nextFreeId.set(nextFree); + + return newId + FIRST_OID; + } + } + + private void increaseBitSetCapacity() + { + final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); + newBitSet.or(_freeIds); + _freeIds = newBitSet; + } + + private int usedIdCount() + { + return _freeIdCount.get() - FIRST_OID; + } + + public static int size() + { + return _freeIdCount.get(); + } + + public static boolean hasInitialized() + { + return _initialized; + } + + public static IdManager getInstance() + { + return SingletonHolder.INSTANCE; + } + + private static class SingletonHolder + { + protected static final IdManager INSTANCE = new IdManager(); + } +} diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/instancemanager/MailManager.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/instancemanager/MailManager.java index 176b407caa..2a82541b39 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/instancemanager/MailManager.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/instancemanager/MailManager.java @@ -31,7 +31,6 @@ import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.entity.Message; @@ -277,7 +276,7 @@ public class MailManager } _messages.remove(msgId); - IdFactory.releaseId(msgId); + IdManager.getInstance().releaseId(msgId); } /** diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/Petition.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/Petition.java index 27462e0995..06d4fc32b2 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/Petition.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/Petition.java @@ -21,7 +21,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.PetitionState; import org.l2jmobius.gameserver.enums.PetitionType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.PetitionManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -47,7 +47,7 @@ public class Petition public Petition(PlayerInstance petitioner, String petitionText, int petitionType) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _type = PetitionType.values()[petitionType - 1]; _content = petitionText; _petitioner = petitioner; diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/WorldObject.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/WorldObject.java index 18e793a718..3b8f7fb5fb 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/WorldObject.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/WorldObject.java @@ -24,7 +24,7 @@ import org.l2jmobius.gameserver.handler.ActionHandler; import org.l2jmobius.gameserver.handler.ActionShiftHandler; import org.l2jmobius.gameserver.handler.IActionHandler; import org.l2jmobius.gameserver.handler.IActionShiftHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; @@ -154,8 +154,8 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif public void refreshId() { World.getInstance().removeObject(this); - IdFactory.releaseId(getObjectId()); - _objectId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(getObjectId()); + _objectId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Creature.java index eaacbe3df2..63fc361334 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -63,7 +63,7 @@ import org.l2jmobius.gameserver.enums.Team; import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MapRegionManager; import org.l2jmobius.gameserver.instancemanager.QuestManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; @@ -288,7 +288,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public Creature(CreatureTemplate template) { - this(IdFactory.getNextId(), template); + this(IdManager.getInstance().getNextId(), template); } /** diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java index d132ad18fc..12209da801 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java @@ -20,7 +20,7 @@ import java.util.concurrent.Future; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.gameserver.enums.InstanceType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.stat.ControllableAirShipStat; import org.l2jmobius.gameserver.model.actor.templates.CreatureTemplate; import org.l2jmobius.gameserver.model.skills.AbnormalType; @@ -48,7 +48,7 @@ public class ControllableAirShipInstance extends AirShipInstance super(template); setInstanceType(InstanceType.ControllableAirShipInstance); _ownerId = ownerId; - _helmId = IdFactory.getNextId(); // not forget to release ! + _helmId = IdManager.getInstance().getNextId(); // not forget to release ! } @Override @@ -282,8 +282,8 @@ public class ControllableAirShipInstance extends AirShipInstance public void refreshId() { super.refreshId(); - IdFactory.releaseId(_helmId); - _helmId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(_helmId); + _helmId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java index 48c52c920f..c8412e68be 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.actor.instance; import org.l2jmobius.gameserver.data.xml.impl.FenceData; import org.l2jmobius.gameserver.enums.FenceState; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; @@ -44,7 +44,7 @@ public class FenceInstance extends WorldObject public FenceInstance(int x, int y, String name, int width, int length, int height, FenceState state) { - super(IdFactory.getNextId()); + super(IdManager.getInstance().getNextId()); _xMin = x - (width / 2); _xMax = x + (width / 2); @@ -59,7 +59,7 @@ public class FenceInstance extends WorldObject _heightFences = new int[height - 1]; for (int i = 0; i < _heightFences.length; i++) { - _heightFences[i] = IdFactory.getNextId(); + _heightFences[i] = IdManager.getInstance().getNextId(); } } } diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 188a600a3f..49d42307de 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -109,7 +109,6 @@ import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; import org.l2jmobius.gameserver.handler.IItemHandler; import org.l2jmobius.gameserver.handler.ItemHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CursedWeaponsManager; @@ -118,6 +117,7 @@ import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.HandysBlockCheckerManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.MapRegionManager; import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager; @@ -1170,7 +1170,7 @@ public class PlayerInstance extends Playable */ private PlayerInstance(PlayerTemplate template, String accountName, PlayerAppearance app) { - this(IdFactory.getNextId(), template, accountName, app); + this(IdManager.getInstance().getNextId(), template, accountName, app); } @Override diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java index 0564bbbe5e..b493b68bcc 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java @@ -21,7 +21,7 @@ import java.util.Locale; import org.l2jmobius.Config; import org.l2jmobius.commons.util.StringUtil; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.HistoryInfo; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.RaceState; @@ -160,7 +160,7 @@ public class RaceManagerInstance extends Npc player.setRace(0, 0); player.setRace(1, 0); - ItemInstance item = new ItemInstance(IdFactory.getNextId(), 4443); + ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 4443); item.setCount(1); item.setEnchantLevel(MonsterRace.getInstance().getRaceNumber()); item.setCustomType1(ticket); diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java index 6762897720..929d68a27f 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.announce; import java.util.Date; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.script.DateRange; /** @@ -32,7 +32,7 @@ public class EventAnnouncement implements IAnnouncement public EventAnnouncement(DateRange range, String content) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _range = range; _content = content; } @@ -88,7 +88,7 @@ public class EventAnnouncement implements IAnnouncement @Override public boolean deleteMe() { - IdFactory.releaseId(_id); + IdManager.getInstance().releaseId(_id); return true; } diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/entity/Couple.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/entity/Couple.java index 6897b8d681..54104ff7ab 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/entity/Couple.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/entity/Couple.java @@ -24,7 +24,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; /** @@ -85,7 +85,7 @@ public class Couple try (Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO mods_wedding (id, player1Id, player2Id, married, affianceDate, weddingDate) VALUES (?, ?, ?, ?, ?, ?)")) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); ps.setInt(1, _id); ps.setInt(2, _player1Id); ps.setInt(3, _player2Id); diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/entity/Message.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/entity/Message.java index 1b0ebe1d93..9002ebdc1a 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/entity/Message.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/entity/Message.java @@ -24,7 +24,7 @@ import java.sql.SQLException; import org.l2jmobius.gameserver.data.sql.impl.CharNameTable; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MailManager; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -99,7 +99,7 @@ public class Message */ public Message(int senderId, int receiverId, boolean isCod, String subject, String text, long reqAdena) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -118,7 +118,7 @@ public class Message */ public Message(int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = subject; @@ -138,7 +138,7 @@ public class Message */ public Message(int senderId, int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -157,7 +157,7 @@ public class Message */ public Message(Message msg) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = msg.getSenderId(); _receiverId = msg.getSenderId(); _subject = ""; @@ -177,7 +177,7 @@ public class Message public Message(int receiverId, ItemInstance item, MailType mailType) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = ""; diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java index e1e27e6111..800fb576c7 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java @@ -17,7 +17,7 @@ package org.l2jmobius.gameserver.model.itemauction; import org.l2jmobius.gameserver.datatables.ItemTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -78,7 +78,7 @@ public class AuctionItem public ItemInstance createNewItemInstance() { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), _itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), _itemId); World.getInstance().addObject(item); item.setCount(_itemCount); item.setEnchantLevel(item.getItem().getDefaultEnchantLevel()); diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 48384d77b9..54b8a4d2b6 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -47,8 +47,8 @@ import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemSkillType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.CastleManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.SiegeGuardManager; import org.l2jmobius.gameserver.model.DropProtection; @@ -262,7 +262,7 @@ public class ItemInstance extends WorldObject */ public ItemInstance(int itemId) { - this(IdFactory.getNextId(), itemId); + this(IdManager.getInstance().getNextId(), itemId); } /** diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java index ee2437143a..7fa54aa75e 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java @@ -16,7 +16,7 @@ */ package org.l2jmobius.gameserver.model.zone; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -50,7 +50,7 @@ public abstract class ZoneForm protected final void dropDebugItem(int itemId, int num, int x, int y, int z) { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); item.setCount(num); item.spawnMe(x, y, z + 5); ZoneManager.getInstance().getDebugItems().add(item); diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/GameServer.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/GameServer.java index 9b394f80fa..494b1d7e0d 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/GameServer.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/GameServer.java @@ -78,7 +78,7 @@ public class GameServer extends Thread protected final CharStatTable _modifiers; protected final World _world; protected final CharTemplateTable _charTemplates; - protected final IdFactory _idFactory; + protected final IdManager _idFactory; protected final SpawnTable _spawnTable; protected final CharNameTable _charNametable; protected final GameTimeController _gameTimeController; @@ -147,7 +147,7 @@ public class GameServer extends Thread _loginController = LoginController.getInstance(); _loginController.setMaxAllowedOnlinePlayers(Config.MAXIMUM_ONLINE_PLAYERS); _charNametable = CharNameTable.getInstance(); - _idFactory = IdFactory.getInstance(); + _idFactory = IdManager.getInstance(); _itemTable = ItemTable.getInstance(); if (!_itemTable.isInitialized()) { diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/IdFactory.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/IdManager.java similarity index 88% rename from L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/IdFactory.java rename to L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/IdManager.java index 81e0bcc047..0bb17e7b85 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/IdFactory.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/IdManager.java @@ -27,16 +27,16 @@ import java.io.ObjectOutputStream; import java.util.Stack; import java.util.logging.Logger; -public class IdFactory +public class IdManager { - private static Logger _log = Logger.getLogger(IdFactory.class.getName()); + private static Logger _log = Logger.getLogger(IdManager.class.getName()); private int _curOID; private Stack _oldOIDs; private static int FIRST_OID = 268435456; - private static IdFactory _instance; + private static IdManager _instance; @SuppressWarnings("unchecked") - private IdFactory() + private IdManager() { try { @@ -54,11 +54,11 @@ public class IdFactory } } - public static IdFactory getInstance() + public static IdManager getInstance() { if (_instance == null) { - _instance = new IdFactory(); + _instance = new IdManager(); } return _instance; } diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/data/ClanTable.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/data/ClanTable.java index a8586807dd..824aed9faf 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/data/ClanTable.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/data/ClanTable.java @@ -27,7 +27,7 @@ import java.util.Map; import java.util.StringTokenizer; import java.util.logging.Logger; -import org.l2jmobius.gameserver.IdFactory; +import org.l2jmobius.gameserver.IdManager; import org.l2jmobius.gameserver.model.Clan; import org.l2jmobius.gameserver.model.ClanMember; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; @@ -138,7 +138,7 @@ public class ClanTable return null; } final Clan clan = new Clan(); - clan.setClanId(IdFactory.getInstance().getNextId()); + clan.setClanId(IdManager.getInstance().getNextId()); clan.setName(clanName); clan.setLevel(0); clan.setHasCastle(0); diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/data/ItemTable.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/data/ItemTable.java index e8e0495798..12a00e6d7f 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/data/ItemTable.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/data/ItemTable.java @@ -25,7 +25,7 @@ import java.util.HashMap; import java.util.StringTokenizer; import java.util.logging.Logger; -import org.l2jmobius.gameserver.IdFactory; +import org.l2jmobius.gameserver.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.ItemInstance; import org.l2jmobius.gameserver.templates.Armor; @@ -495,7 +495,7 @@ public class ItemTable public ItemInstance createItem(int itemId) { final ItemInstance temp = new ItemInstance(); - temp.setObjectId(IdFactory.getInstance().getNextId()); + temp.setObjectId(IdManager.getInstance().getNextId()); temp.setItem(getTemplate(itemId)); World.getInstance().storeObject(temp); return temp; diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/handler/itemhandlers/PetSummon.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/handler/itemhandlers/PetSummon.java index db89ad7341..4c1f4806f6 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/handler/itemhandlers/PetSummon.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/handler/itemhandlers/PetSummon.java @@ -17,7 +17,7 @@ */ package org.l2jmobius.gameserver.handler.itemhandlers; -import org.l2jmobius.gameserver.IdFactory; +import org.l2jmobius.gameserver.IdManager; import org.l2jmobius.gameserver.data.ExperienceTable; import org.l2jmobius.gameserver.data.NpcTable; import org.l2jmobius.gameserver.handler.IItemHandler; @@ -82,7 +82,7 @@ public class PetSummon implements IItemHandler final PetInstance newpet = new PetInstance(petTemplate); newpet.setTitle(activeChar.getName()); newpet.setControlItemId(item.getObjectId()); - newpet.setObjectId(IdFactory.getInstance().getNextId()); + newpet.setObjectId(IdManager.getInstance().getNextId()); newpet.setX(activeChar.getX() + 50); newpet.setY(activeChar.getY() + 100); newpet.setZ(activeChar.getZ()); diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/model/Spawn.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/model/Spawn.java index 36de88f0da..089f177354 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/model/Spawn.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/model/Spawn.java @@ -20,7 +20,7 @@ package org.l2jmobius.gameserver.model; import java.lang.reflect.Constructor; import java.util.logging.Logger; -import org.l2jmobius.gameserver.IdFactory; +import org.l2jmobius.gameserver.IdManager; import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance; import org.l2jmobius.gameserver.model.actor.instance.NpcInstance; import org.l2jmobius.gameserver.templates.Npc; @@ -181,7 +181,7 @@ public class Spawn _template }; mob = (NpcInstance) _constructor.newInstance(parameters); - mob.setObjectId(IdFactory.getInstance().getNextId()); + mob.setObjectId(IdManager.getInstance().getNextId()); mob.setAutoAttackable(mob instanceof MonsterInstance); if (getRandomx() > 0) { diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/ClientThread.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/ClientThread.java index 91b3b070fe..86e520d005 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/ClientThread.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/ClientThread.java @@ -30,7 +30,7 @@ import java.util.List; import java.util.StringTokenizer; import java.util.logging.Logger; -import org.l2jmobius.gameserver.IdFactory; +import org.l2jmobius.gameserver.IdManager; import org.l2jmobius.gameserver.data.CharNameTable; import org.l2jmobius.gameserver.data.ClanTable; import org.l2jmobius.gameserver.data.ItemTable; @@ -211,7 +211,7 @@ public class ClientThread extends Thread saveFile = new File(_charFolder, cha.getName() + "_warehouse.csv"); storeWarehouse(cha, saveFile); } - IdFactory.getInstance().saveCurrentState(); + IdManager.getInstance().saveCurrentState(); } private void storeShortcuts(PlayerInstance cha, File saveFile) diff --git a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java index 58db00abf9..4c1aadde21 100644 --- a/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java +++ b/L2J_Mobius_C1_HarbingersOfWar/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java @@ -19,7 +19,7 @@ package org.l2jmobius.gameserver.network.clientpackets; import java.io.IOException; -import org.l2jmobius.gameserver.IdFactory; +import org.l2jmobius.gameserver.IdManager; import org.l2jmobius.gameserver.data.CharNameTable; import org.l2jmobius.gameserver.data.CharTemplateTable; import org.l2jmobius.gameserver.data.ItemTable; @@ -89,7 +89,7 @@ public class CharacterCreate extends ClientBasePacket private void initNewChar(ClientThread client, PlayerInstance newChar) throws IOException { - newChar.setObjectId(IdFactory.getInstance().getNextId()); + newChar.setObjectId(IdManager.getInstance().getNextId()); World.getInstance().storeObject(newChar); final CharTemplate template = CharTemplateTable.getInstance().getTemplate(newChar.getClassId()); newChar.setAccuracy(template.getAcc()); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/scripts/ai/others/FeedableBeasts.java b/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/scripts/ai/others/FeedableBeasts.java index 941e31d92b..eae701c7da 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/scripts/ai/others/FeedableBeasts.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/dist/game/data/scripts/ai/others/FeedableBeasts.java @@ -24,7 +24,7 @@ import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.ai.CtrlIntention; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.enums.ChatType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.actor.Attackable; import org.l2jmobius.gameserver.model.actor.instance.NpcInstance; @@ -404,7 +404,7 @@ public class FeedableBeasts extends Quest } final NpcTemplate template = NpcTable.getInstance().getTemplate(nextNpcId); - final TamedBeastInstance nextNpc = new TamedBeastInstance(IdFactory.getNextId(), template, player, food, npc.getX(), npc.getY(), npc.getZ()); + final TamedBeastInstance nextNpc = new TamedBeastInstance(IdManager.getInstance().getNextId(), template, player, food, npc.getX(), npc.getY(), npc.getZ()); nextNpc.setRunning(); // If player has Q020 going, give quest item diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/GameServer.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/GameServer.java index 3b2d9644a6..a6e7f19824 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/GameServer.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/GameServer.java @@ -80,7 +80,6 @@ import org.l2jmobius.gameserver.handler.ItemHandler; import org.l2jmobius.gameserver.handler.SkillHandler; import org.l2jmobius.gameserver.handler.UserCommandHandler; import org.l2jmobius.gameserver.handler.VoicedCommandHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AuctionManager; import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CastleManorManager; @@ -95,6 +94,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.FourSepulchersManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.MercTicketManager; import org.l2jmobius.gameserver.instancemanager.PetitionManager; @@ -173,9 +173,9 @@ public class GameServer ThreadPool.scheduleAtFixedRate(DeadlockDetector.getInstance(), Config.DEADLOCKCHECK_INTIAL_TIME, Config.DEADLOCKCHECK_DELAY_TIME); } - Util.printSection("IdFactory"); - IdFactory.init(); - if (!IdFactory.hasInitialized()) + Util.printSection("IdManager"); + IdManager.getInstance(); + if (!IdManager.hasInitialized()) { LOGGER.severe("IdFactory: Could not read object IDs from database. Please check your configuration."); throw new Exception("Could not initialize the ID factory!"); @@ -392,7 +392,7 @@ public class GameServer Util.printSection("Game Server"); - LOGGER.info("IdFactory: Free ObjectID's remaining: " + IdFactory.size()); + LOGGER.info("IdFactory: Free ObjectID's remaining: " + IdManager.size()); if (Config.ALLOW_WEDDING) { diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/cache/CrestCache.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/cache/CrestCache.java index 40d063ffe1..3de272a969 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/cache/CrestCache.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/cache/CrestCache.java @@ -31,7 +31,7 @@ import java.util.logging.Logger; import org.l2jmobius.Config; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.datatables.sql.ClanTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.clan.Clan; /** @@ -135,7 +135,7 @@ public class CrestCache LOGGER.info("Found old crest file \"" + file.getName() + "\" for clanId " + clanId); - final int newId = IdFactory.getNextId(); + final int newId = IdManager.getInstance().getNextId(); final Clan clan = ClanTable.getInstance().getClan(clanId); if (clan != null) { diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/datatables/ItemTable.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/datatables/ItemTable.java index 4de7d29d95..1af1ad4b04 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/datatables/ItemTable.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/datatables/ItemTable.java @@ -32,7 +32,7 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.datatables.sql.PetDataTable; import org.l2jmobius.gameserver.engines.DocumentEngine; import org.l2jmobius.gameserver.engines.ItemDataHolder; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Attackable; @@ -178,7 +178,7 @@ public class ItemTable public ItemInstance createItem(String process, int itemId, int count, PlayerInstance actor, WorldObject reference) { // Create and Init the ItemInstance corresponding to the Item Identifier - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); // create loot schedule also if autoloot is enabled if (process.equalsIgnoreCase("loot")/* && !Config.AUTO_LOOT */) @@ -293,7 +293,7 @@ public class ItemTable item.setLastChange(ItemInstance.REMOVED); World.getInstance().removeObject(item); - IdFactory.releaseId(item.getObjectId()); + IdManager.getInstance().releaseId(item.getObjectId()); // if it's a pet control item, delete the pet as well if (PetDataTable.isPetItem(item.getItemId())) diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/datatables/sql/ClanTable.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/datatables/sql/ClanTable.java index 83b50e9571..db70e81ace 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/datatables/sql/ClanTable.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/datatables/sql/ClanTable.java @@ -29,9 +29,9 @@ import java.util.regex.PatternSyntaxException; import org.l2jmobius.Config; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.SiegeManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -189,7 +189,7 @@ public class ClanTable return null; } - final Clan clan = new Clan(IdFactory.getNextId(), clanName); + final Clan clan = new Clan(IdManager.getInstance().getNextId(), clanName); final ClanMember leader = new ClanMember(clan, player.getName(), player.getLevel(), player.getClassId().getId(), player.getObjectId(), player.getPledgeType(), player.getPowerGrade(), player.getTitle()); clan.setLeader(leader); @@ -323,7 +323,7 @@ public class ClanTable final int clanLvl = clan.getLevel(); _clans.remove(clanId); - IdFactory.releaseId(clanId); + IdManager.getInstance().releaseId(clanId); try (Connection con = DatabaseFactory.getConnection()) { diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/datatables/xml/BoatData.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/datatables/xml/BoatData.java index f00007ec8a..04f58f5001 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/datatables/xml/BoatData.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/datatables/xml/BoatData.java @@ -29,7 +29,7 @@ import org.w3c.dom.Node; import org.l2jmobius.Config; import org.l2jmobius.commons.util.IXmlReader; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.actor.instance.BoatInstance; import org.l2jmobius.gameserver.model.actor.templates.CreatureTemplate; @@ -122,7 +122,7 @@ public class BoatData implements IXmlReader npcDat.set("baseMDef", 100); final CreatureTemplate template = new CreatureTemplate(npcDat); - final BoatInstance boat = new BoatInstance(IdFactory.getNextId(), template); + final BoatInstance boat = new BoatInstance(IdManager.getInstance().getNextId(), template); boat.getPosition().setHeading(set.getInt("heading")); boat.setXYZ(set.getInt("spawnX"), set.getInt("spawnY"), set.getInt("spawnZ")); boat.setPathA(set.getInt("pathIdA"), set.getInt("ticketA"), set.getInt("xTeleNoTicketA"), set.getInt("yTeleNoTicketA"), set.getInt("zTeleNoTicketA"), set.getString("announcerA"), set.getString("message10A"), set.getString("message5A"), set.getString("message1A"), set.getString("message0A"), set.getString("messageBeginA"), paths.get(set.getInt("pathIdA"))); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/datatables/xml/DoorData.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/datatables/xml/DoorData.java index c459defcfc..fe58b5f20d 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/datatables/xml/DoorData.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/datatables/xml/DoorData.java @@ -27,8 +27,8 @@ import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.l2jmobius.commons.util.IXmlReader; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.ClanHallManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.actor.instance.DoorInstance; @@ -176,7 +176,7 @@ public class DoorData implements IXmlReader npcDat.set("baseMDef", mDef); final CreatureTemplate template = new CreatureTemplate(npcDat); - final DoorInstance door = new DoorInstance(IdFactory.getNextId(), template, id, name, unlockable); + final DoorInstance door = new DoorInstance(IdManager.getInstance().getNextId(), template, id, name, unlockable); door.setRange(xMin, yMin, zMin, xMax, yMax, zMax); try { diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/datatables/xml/StaticObjectData.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/datatables/xml/StaticObjectData.java index fabfa530f6..c4a7773519 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/datatables/xml/StaticObjectData.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/datatables/xml/StaticObjectData.java @@ -26,7 +26,7 @@ import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.l2jmobius.commons.util.IXmlReader; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.actor.instance.StaticObjectInstance; import org.l2jmobius.gameserver.network.serverpackets.StaticObject; @@ -74,7 +74,7 @@ public class StaticObjectData implements IXmlReader } // Create and spawn the StaticObject instance. - final StaticObjectInstance obj = new StaticObjectInstance(IdFactory.getNextId()); + final StaticObjectInstance obj = new StaticObjectInstance(IdManager.getInstance().getNextId()); obj.setType(set.getInt("type")); obj.setStaticObjectId(set.getInt("id")); obj.setXYZ(set.getInt("x"), set.getInt("y"), set.getInt("z")); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminFightCalculator.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminFightCalculator.java index 7389424711..0a5d87e3c4 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminFightCalculator.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminFightCalculator.java @@ -21,7 +21,7 @@ import java.util.StringTokenizer; import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.handler.IAdminCommandHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; @@ -205,8 +205,8 @@ public class AdminFightCalculator implements IAdminCommandHandler final StringTokenizer st = new StringTokenizer(trimmedParams); mid1 = Integer.parseInt(st.nextToken()); mid2 = Integer.parseInt(st.nextToken()); - npc1 = new MonsterInstance(IdFactory.getNextId(), NpcTable.getInstance().getTemplate(mid1)); - npc2 = new MonsterInstance(IdFactory.getNextId(), NpcTable.getInstance().getTemplate(mid2)); + npc1 = new MonsterInstance(IdManager.getInstance().getNextId(), NpcTable.getInstance().getTemplate(mid1)); + npc2 = new MonsterInstance(IdManager.getInstance().getNextId(), NpcTable.getInstance().getTemplate(mid2)); } int miss1 = 0; diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/handler/itemhandlers/ChristmasTree.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/handler/itemhandlers/ChristmasTree.java index 3af7c3180c..735d5b2e23 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/handler/itemhandlers/ChristmasTree.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/handler/itemhandlers/ChristmasTree.java @@ -19,7 +19,7 @@ package org.l2jmobius.gameserver.handler.itemhandlers; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.handler.IItemHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.actor.instance.NpcInstance; @@ -72,7 +72,7 @@ public class ChristmasTree implements IItemHandler try { final Spawn spawn = new Spawn(template1); - spawn.setId(IdFactory.getNextId()); + spawn.setId(IdManager.getInstance().getNextId()); spawn.setX(target.getX()); spawn.setY(target.getY()); spawn.setZ(target.getZ()); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/handler/itemhandlers/JackpotSeed.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/handler/itemhandlers/JackpotSeed.java index c78d96dccc..335e5bed43 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/handler/itemhandlers/JackpotSeed.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/handler/itemhandlers/JackpotSeed.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.handler.itemhandlers; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.handler.IItemHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.actor.instance.GourdInstance; @@ -64,7 +64,7 @@ public class JackpotSeed implements IItemHandler try { final Spawn spawn = new Spawn(template1); - spawn.setId(IdFactory.getNextId()); + spawn.setId(IdManager.getInstance().getNextId()); spawn.setX(player.getX()); spawn.setY(player.getY()); spawn.setZ(player.getZ()); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/handler/itemhandlers/SummonItems.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/handler/itemhandlers/SummonItems.java index 77cb98b4b8..0b055b6517 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/handler/itemhandlers/SummonItems.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/handler/itemhandlers/SummonItems.java @@ -22,7 +22,7 @@ import org.l2jmobius.gameserver.datatables.SkillTable; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.datatables.xml.SummonItemData; import org.l2jmobius.gameserver.handler.IItemHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.SummonItem; import org.l2jmobius.gameserver.model.World; @@ -139,7 +139,7 @@ public class SummonItems implements IItemHandler try { final Spawn spawn = new Spawn(npcTemplate); - spawn.setId(IdFactory.getNextId()); + spawn.setId(IdManager.getInstance().getNextId()); spawn.setX(player.getX()); spawn.setY(player.getY()); spawn.setZ(player.getZ()); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/handler/skillhandlers/SiegeFlag.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/handler/skillhandlers/SiegeFlag.java index b8dbe76810..3b61e6c448 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/handler/skillhandlers/SiegeFlag.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/handler/skillhandlers/SiegeFlag.java @@ -18,10 +18,10 @@ package org.l2jmobius.gameserver.handler.skillhandlers; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.handler.ISkillHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.SiegeManager; import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill.SkillType; @@ -79,7 +79,7 @@ public class SiegeFlag implements ISkillHandler try { // Spawn a new flag - final SiegeFlagInstance flag = new SiegeFlagInstance(player, IdFactory.getNextId(), NpcTable.getInstance().getTemplate(35062)); + final SiegeFlagInstance flag = new SiegeFlagInstance(player, IdManager.getInstance().getNextId(), NpcTable.getInstance().getTemplate(35062)); if (skill.isAdvancedFlag()) { flag.setAdvanceFlag(true); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/instancemanager/ChristmasManager.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/instancemanager/ChristmasManager.java index c3fde3dc03..cff2d4d55d 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/instancemanager/ChristmasManager.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/instancemanager/ChristmasManager.java @@ -27,7 +27,6 @@ import org.l2jmobius.gameserver.datatables.ItemTable; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.datatables.sql.SpawnTable; import org.l2jmobius.gameserver.enums.ChatType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Attackable; @@ -467,7 +466,7 @@ public class ChristmasManager { final NpcTemplate template1 = NpcTable.getInstance().getTemplate(id); final Spawn spawn = new Spawn(template1); - spawn.setId(IdFactory.getNextId()); + spawn.setId(IdManager.getInstance().getNextId()); spawn.setX(x); spawn.setY(y); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/idfactory/IdFactory.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/instancemanager/IdManager.java similarity index 74% rename from L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/idfactory/IdFactory.java rename to L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/instancemanager/IdManager.java index 525b91471d..8f2ddba9f1 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/idfactory/IdFactory.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/instancemanager/IdManager.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.l2jmobius.gameserver.idfactory; +package org.l2jmobius.gameserver.instancemanager; import java.sql.Connection; import java.sql.PreparedStatement; @@ -32,35 +32,12 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.util.PrimeFinder; /** - * @author Mobius (reworked from L2J version) + * @author Mobius (reworked from L2J IdFactory) */ -public abstract class IdFactory +public class IdManager { - private static final Logger LOGGER = Logger.getLogger(IdFactory.class.getName()); + private static final Logger LOGGER = Logger.getLogger(IdManager.class.getName()); - protected static final String[] ID_CHECKS = - { - "SELECT owner_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT object_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT char_id FROM character_quests WHERE char_id >= ? AND char_id < ?", - "SELECT char_id FROM character_friends WHERE char_id >= ? AND char_id < ?", - "SELECT char_id FROM character_friends WHERE friend_id >= ? AND friend_id < ?", - "SELECT char_obj_id FROM character_hennas WHERE char_obj_id >= ? AND char_obj_id < ?", - "SELECT char_id FROM character_recipebook WHERE char_id >= ? AND char_id < ?", - "SELECT char_obj_id FROM character_shortcuts WHERE char_obj_id >= ? AND char_obj_id < ?", - "SELECT char_obj_id FROM character_macroses WHERE char_obj_id >= ? AND char_obj_id < ?", - "SELECT char_obj_id FROM character_skills WHERE char_obj_id >= ? AND char_obj_id < ?", - "SELECT char_obj_id FROM character_skills_save WHERE char_obj_id >= ? AND char_obj_id < ?", - "SELECT char_obj_id FROM character_subclasses WHERE char_obj_id >= ? AND char_obj_id < ?", - "SELECT obj_Id FROM characters WHERE obj_Id >= ? AND obj_Id < ?", - "SELECT clanid FROM characters WHERE clanid >= ? AND clanid < ?", - "SELECT clan_id FROM clan_data WHERE clan_id >= ? AND clan_id < ?", - "SELECT clan_id FROM siege_clans WHERE clan_id >= ? AND clan_id < ?", - "SELECT ally_id FROM clan_data WHERE ally_id >= ? AND ally_id < ?", - "SELECT leader_id FROM clan_data WHERE leader_id >= ? AND leader_id < ?", - "SELECT item_obj_id FROM pets WHERE item_obj_id >= ? AND item_obj_id < ?", - "SELECT object_id FROM itemsonground WHERE object_id >= ? AND object_id < ?" - }; //@formatter:off private static final String[][] ID_EXTRACTS = { @@ -70,20 +47,22 @@ public abstract class IdFactory {"itemsonground","object_id"} }; //@formatter:on + private static final String[] TIMESTAMPS_CLEAN = { "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" }; - public static final int FIRST_OID = 0x10000000; - public static final int LAST_OID = 0x7FFFFFFF; - public static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; + + private static final int FIRST_OID = 0x10000000; + private static final int LAST_OID = 0x7FFFFFFF; + private static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; private static BitSet _freeIds; private static AtomicInteger _freeIdCount; private static AtomicInteger _nextFreeId; private static boolean _initialized; - public static void init() + public IdManager() { // Update characters online status. try (Connection con = DatabaseFactory.getConnection(); @@ -94,7 +73,7 @@ public abstract class IdFactory } catch (Exception e) { - LOGGER.warning("IdFactory: Could not update characters online status: " + e); + LOGGER.warning("IdManager: Could not update characters online status: " + e); } // Cleanup database. @@ -145,11 +124,11 @@ public abstract class IdFactory cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id NOT IN (SELECT obj_Id FROM characters) AND items.owner_id NOT IN (SELECT clan_id FROM clan_data);"); statement.executeUpdate("UPDATE characters SET clanid=0 WHERE characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); - LOGGER.info("IdFactory: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); + LOGGER.info("IdManager: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); } catch (Exception e) { - LOGGER.warning("IdFactory: Could not clean up database: " + e); + LOGGER.warning("IdManager: Could not clean up database: " + e); } // Cleanup timestamps. @@ -164,11 +143,11 @@ public abstract class IdFactory cleanCount += statement.executeUpdate(); } } - LOGGER.info("IdFactory: Cleaned " + cleanCount + " expired timestamps from database."); + LOGGER.info("IdManager: Cleaned " + cleanCount + " expired timestamps from database."); } catch (Exception e) { - LOGGER.warning("IdFactory: Could not clean expired timestamps from database. " + e); + LOGGER.warning("IdManager: Could not clean expired timestamps from database. " + e); } // Initialize. @@ -205,7 +184,7 @@ public abstract class IdFactory final int objectId = usedObjectId - FIRST_OID; if (objectId < 0) { - LOGGER.warning("IdFactory: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); + LOGGER.warning("IdManager: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); continue; } _freeIds.set(usedObjectId - FIRST_OID); @@ -218,7 +197,7 @@ public abstract class IdFactory catch (Exception e) { _initialized = false; - LOGGER.severe("IdFactory: Could not be initialized properly: " + e.getMessage()); + LOGGER.severe("IdManager: Could not be initialized properly: " + e.getMessage()); } // Schedule increase capacity task. @@ -233,10 +212,10 @@ public abstract class IdFactory } }, 30000, 30000); - LOGGER.info("IdFactory: " + _freeIds.size() + " id's available."); + LOGGER.info("IdManager: " + _freeIds.size() + " id's available."); } - public synchronized static void releaseId(int objectId) + public void releaseId(int objectId) { synchronized (_nextFreeId) { @@ -247,12 +226,12 @@ public abstract class IdFactory } else { - LOGGER.warning("IdFactory: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); + LOGGER.warning("IdManager: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); } } } - public synchronized static int getNextId() + public int getNextId() { synchronized (_nextFreeId) { @@ -265,7 +244,7 @@ public abstract class IdFactory { if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) { - throw new NullPointerException("IdFactory: Ran out of valid ids."); + throw new NullPointerException("IdManager: Ran out of valid ids."); } increaseBitSetCapacity(); } @@ -275,14 +254,14 @@ public abstract class IdFactory } } - private static void increaseBitSetCapacity() + private void increaseBitSetCapacity() { final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); newBitSet.or(_freeIds); _freeIds = newBitSet; } - private static int usedIdCount() + private int usedIdCount() { return _freeIdCount.get() - FIRST_OID; } @@ -296,4 +275,14 @@ public abstract class IdFactory { return _initialized; } + + public static IdManager getInstance() + { + return SingletonHolder.INSTANCE; + } + + private static class SingletonHolder + { + protected static final IdManager INSTANCE = new IdManager(); + } } diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/instancemanager/MercTicketManager.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/instancemanager/MercTicketManager.java index 125d2fb3d6..600f46ffbe 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/instancemanager/MercTicketManager.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/instancemanager/MercTicketManager.java @@ -27,7 +27,6 @@ import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.handler.AutoChatHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.SiegeGuardInstance; @@ -714,7 +713,7 @@ public class MercTicketManager { itemId = ITEM_IDS[i]; // create the ticket in the gameworld - final ItemInstance dropticket = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance dropticket = new ItemInstance(IdManager.getInstance().getNextId(), itemId); dropticket.setLocation(ItemInstance.ItemLocation.VOID); dropticket.dropMe(null, x, y, z); dropticket.setDropTime(0); // avoids it from beeing removed by the auto item destroyer @@ -761,9 +760,9 @@ public class MercTicketManager int count = 0; ItemInstance ticket; - for (int i = 0; i < _droppedTickets.size(); i++) + for (ItemInstance _droppedTicket : _droppedTickets) { - ticket = _droppedTickets.get(i); + ticket = _droppedTicket; if ((ticket != null) && (ticket.getItemId() == itemId)) { count++; @@ -794,9 +793,9 @@ public class MercTicketManager int count = 0; ItemInstance ticket; - for (int i = 0; i < _droppedTickets.size(); i++) + for (ItemInstance _droppedTicket : _droppedTickets) { - ticket = _droppedTickets.get(i); + ticket = _droppedTicket; if ((ticket != null) && (getTicketCastleId(ticket.getItemId()) == castleId)) { count++; @@ -837,7 +836,7 @@ public class MercTicketManager castle.getSiege().getSiegeGuardManager().hireMerc(x, y, z, heading, NPC_IDS[i]); // create the ticket in the gameworld - final ItemInstance dropticket = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance dropticket = new ItemInstance(IdManager.getInstance().getNextId(), itemId); dropticket.setLocation(ItemInstance.ItemLocation.INVENTORY); dropticket.dropMe(null, x, y, z); dropticket.setDropTime(0); // avoids it from beeing removed by the auto item destroyer @@ -856,7 +855,7 @@ public class MercTicketManager final NpcTemplate template = NpcTable.getInstance().getTemplate(npcId); if (template != null) { - final SiegeGuardInstance npc = new SiegeGuardInstance(IdFactory.getNextId(), template); + final SiegeGuardInstance npc = new SiegeGuardInstance(IdManager.getInstance().getNextId(), template); npc.setCurrentHpMp(npc.getMaxHp(), npc.getMaxMp()); npc.setDecayed(false); npc.spawnMe(x, y, (z + 20)); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/instancemanager/PetitionManager.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/instancemanager/PetitionManager.java index 7d5e3a0fe2..5a87f61d27 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/instancemanager/PetitionManager.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/instancemanager/PetitionManager.java @@ -27,7 +27,6 @@ import java.util.logging.Logger; import org.l2jmobius.Config; import org.l2jmobius.gameserver.datatables.xml.AdminData; import org.l2jmobius.gameserver.enums.ChatType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.serverpackets.CreatureSay; @@ -88,7 +87,7 @@ public class PetitionManager public Petition(PlayerInstance petitioner, String petitionText, int petitionType) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); if ((petitionType - 1) >= PetitionType.values().length) { LOGGER.warning("PetitionManager:Petition : invalid petition type (received type was +1) : " + petitionType); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/WorldObject.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/WorldObject.java index ccdd9062be..13cc9642df 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/WorldObject.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/WorldObject.java @@ -19,7 +19,7 @@ package org.l2jmobius.gameserver.model; import java.util.logging.Logger; import org.l2jmobius.Config; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.MercTicketManager; import org.l2jmobius.gameserver.model.actor.Creature; @@ -193,8 +193,8 @@ public abstract class WorldObject public void refreshId() { World.getInstance().removeObject(this); - IdFactory.releaseId(getObjectId()); - _objectId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(getObjectId()); + _objectId = IdManager.getInstance().getNextId(); } /** diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java index cc78bd8f63..b94806695b 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.actor.instance; import org.l2jmobius.gameserver.datatables.xml.FenceData; import org.l2jmobius.gameserver.enums.FenceState; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.network.serverpackets.DeleteObject; @@ -42,7 +42,7 @@ public class FenceInstance extends WorldObject public FenceInstance(int x, int y, String name, int width, int length, int height, FenceState state) { - super(IdFactory.getNextId()); + super(IdManager.getInstance().getNextId()); _xMin = x - (width / 2); _xMax = x + (width / 2); @@ -57,7 +57,7 @@ public class FenceInstance extends WorldObject _heightFences = new int[height - 1]; for (int i = 0; i < _heightFences.length; i++) { - _heightFences[i] = IdFactory.getNextId(); + _heightFences[i] = IdManager.getInstance().getNextId(); } } } diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/NpcInstance.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/NpcInstance.java index c01978e2df..a0835e3434 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/NpcInstance.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/NpcInstance.java @@ -35,10 +35,10 @@ import org.l2jmobius.gameserver.datatables.sql.SpawnTable; import org.l2jmobius.gameserver.datatables.xml.MultisellData; import org.l2jmobius.gameserver.datatables.xml.ZoneData; import org.l2jmobius.gameserver.enums.ChatType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.DimensionalRiftManager; import org.l2jmobius.gameserver.instancemanager.FortManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.QuestManager; import org.l2jmobius.gameserver.instancemanager.RaidBossSpawnManager; import org.l2jmobius.gameserver.model.DropCategory; @@ -1820,7 +1820,7 @@ public class NpcInstance extends Creature sm.addItemName(4442); player.sendPacket(sm); - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), 4442); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 4442); item.setCount(1); item.setCustomType1(lotonumber); item.setEnchantLevel(enchant); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/PetInstance.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/PetInstance.java index 88b649a3ca..e1e64a76d2 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/PetInstance.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/PetInstance.java @@ -27,7 +27,7 @@ import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.ai.CtrlIntention; import org.l2jmobius.gameserver.datatables.sql.PetDataTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.model.PetData; import org.l2jmobius.gameserver.model.Skill; @@ -820,11 +820,11 @@ public class PetInstance extends Summon { if (template.getType().equalsIgnoreCase("BabyPet")) { - pet = new BabyPetInstance(IdFactory.getNextId(), template, owner, control); + pet = new BabyPetInstance(IdManager.getInstance().getNextId(), template, owner, control); } else { - pet = new PetInstance(IdFactory.getNextId(), template, owner, control); + pet = new PetInstance(IdManager.getInstance().getNextId(), template, owner, control); } final PreparedStatement statement = con.prepareStatement("SELECT item_obj_id, name, level, curHp, curMp, exp, sp, karma, pkkills, fed FROM pets WHERE item_obj_id=?"); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java index a42846b5f8..f12e26a027 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java @@ -21,7 +21,7 @@ import java.util.Locale; import org.l2jmobius.Config; import org.l2jmobius.commons.util.StringUtil; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; import org.l2jmobius.gameserver.model.entity.event.MonsterRace; import org.l2jmobius.gameserver.model.entity.event.MonsterRace.HistoryInfo; @@ -160,7 +160,7 @@ public class RaceManagerInstance extends FolkInstance player.setRace(0, 0); player.setRace(1, 0); - ItemInstance item = new ItemInstance(IdFactory.getNextId(), 4443); + ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 4443); item.setCount(1); item.setEnchantLevel(MonsterRace.getInstance().getRaceNumber()); item.setCustomType1(ticket); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/Auction.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/Auction.java index fb5bab7dfb..f71e44499e 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/Auction.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/Auction.java @@ -27,9 +27,9 @@ import java.util.logging.Logger; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.datatables.sql.ClanTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AuctionManager; import org.l2jmobius.gameserver.instancemanager.ClanHallManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -396,7 +396,7 @@ public class Auction else { statement = con.prepareStatement("INSERT INTO auction_bid (id, auctionId, bidderId, bidderName, maxBid, clan_name, time_bid) VALUES (?, ?, ?, ?, ?, ?, ?)"); - statement.setInt(1, IdFactory.getNextId()); + statement.setInt(1, IdManager.getInstance().getNextId()); statement.setInt(2, _id); statement.setInt(3, bidder.getClanId()); statement.setString(4, bidder.getName()); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/Wedding.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/Wedding.java index d224e930b3..5dafe93861 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/Wedding.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/Wedding.java @@ -23,7 +23,7 @@ import java.util.Calendar; import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; /** @@ -90,7 +90,7 @@ public class Wedding try (Connection con = DatabaseFactory.getConnection()) { PreparedStatement statement; - _Id = IdFactory.getNextId(); + _Id = IdManager.getInstance().getNextId(); statement = con.prepareStatement("INSERT INTO mods_wedding (id, player1Id, player2Id, married, affianceDate, weddingDate) VALUES (?, ?, ?, ?, ?, ?)"); statement.setInt(1, _Id); statement.setInt(2, _player1Id); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/event/MonsterRace.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/event/MonsterRace.java index 1ca61c4fe6..2a694a1b2a 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/event/MonsterRace.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/event/MonsterRace.java @@ -35,7 +35,7 @@ import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.datatables.sql.NpcTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.NpcInstance; import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; import org.l2jmobius.gameserver.model.zone.type.DerbyTrackZone; @@ -327,7 +327,7 @@ public class MonsterRace { final NpcTemplate template = NpcTable.getInstance().getTemplate(_npcTemplates.get(i)); _constructor = Class.forName("org.l2jmobius.gameserver.model.actor.instance." + template.getType() + "Instance").getConstructors()[0]; - final int objectId = IdFactory.getNextId(); + final int objectId = IdManager.getInstance().getNextId(); _monsters[i] = (NpcInstance) _constructor.newInstance(objectId, template); } catch (Exception e) diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/siege/FortSiege.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/siege/FortSiege.java index 6bcb1e5fbe..b5972e1bb4 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/siege/FortSiege.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/siege/FortSiege.java @@ -29,10 +29,10 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.datatables.sql.ClanTable; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.enums.TeleportWhereType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.FortSiegeGuardManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager.SiegeSpawn; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MercTicketManager; import org.l2jmobius.gameserver.model.SiegeClan; import org.l2jmobius.gameserver.model.SiegeClan.SiegeClanType; @@ -1299,7 +1299,7 @@ public class FortSiege for (SiegeSpawn _sp : FortSiegeManager.getInstance().getCommanderSpawnList(id)) { CommanderInstance commander; - commander = new CommanderInstance(IdFactory.getNextId(), NpcTable.getInstance().getTemplate(_sp.getNpcId())); + commander = new CommanderInstance(IdManager.getInstance().getNextId(), NpcTable.getInstance().getTemplate(_sp.getNpcId())); commander.setCurrentHpMp(commander.getMaxHp(), commander.getMaxMp()); commander.setHeading(_sp.getLocation().getHeading()); commander.spawnMe(_sp.getLocation().getX(), _sp.getLocation().getY(), _sp.getLocation().getZ() + 50); @@ -1321,7 +1321,7 @@ public class FortSiege for (SiegeSpawn _sp : FortSiegeManager.getInstance().getFlagList(id)) { ArtefactInstance combatflag; - combatflag = new ArtefactInstance(IdFactory.getNextId(), NpcTable.getInstance().getTemplate(_sp.getNpcId())); + combatflag = new ArtefactInstance(IdManager.getInstance().getNextId(), NpcTable.getInstance().getTemplate(_sp.getNpcId())); combatflag.setCurrentHpMp(combatflag.getMaxHp(), combatflag.getMaxMp()); combatflag.setHeading(_sp.getLocation().getHeading()); combatflag.spawnMe(_sp.getLocation().getX(), _sp.getLocation().getY(), _sp.getLocation().getZ() + 10); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/siege/Siege.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/siege/Siege.java index b31ca6f816..be0626aa62 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/siege/Siege.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/siege/Siege.java @@ -31,7 +31,7 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.datatables.sql.ClanTable; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.enums.TeleportWhereType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MercTicketManager; import org.l2jmobius.gameserver.instancemanager.SiegeGuardManager; import org.l2jmobius.gameserver.instancemanager.SiegeManager; @@ -1518,7 +1518,7 @@ public class Siege for (SiegeSpawn _sp : SiegeManager.getInstance().getArtefactSpawnList(id)) { ArtefactInstance art; - art = new ArtefactInstance(IdFactory.getNextId(), NpcTable.getInstance().getTemplate(_sp.getNpcId())); + art = new ArtefactInstance(IdManager.getInstance().getNextId(), NpcTable.getInstance().getTemplate(_sp.getNpcId())); art.setCurrentHpMp(art.getMaxHp(), art.getMaxMp()); art.setHeading(_sp.getLocation().getHeading()); art.spawnMe(_sp.getLocation().getX(), _sp.getLocation().getY(), _sp.getLocation().getZ() + 50); @@ -1544,7 +1544,7 @@ public class Siege final NpcTemplate template = NpcTable.getInstance().getTemplate(_sp.getNpcId()); template.getStatSet().set("baseHpMax", _sp.getHp()); - ct = new ControlTowerInstance(IdFactory.getNextId(), template); + ct = new ControlTowerInstance(IdManager.getInstance().getNextId(), template); ct.setCurrentHpMp(ct.getMaxHp(), ct.getMaxMp()); ct.spawnMe(_sp.getLocation().getX(), _sp.getLocation().getY(), _sp.getLocation().getZ() + 20); _controlTowerCount++; diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/siege/clanhalls/BanditStrongholdSiege.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/siege/clanhalls/BanditStrongholdSiege.java index baba2bbf9e..3e4aed322b 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/siege/clanhalls/BanditStrongholdSiege.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/siege/clanhalls/BanditStrongholdSiege.java @@ -29,8 +29,8 @@ import org.l2jmobius.gameserver.datatables.sql.ClanTable; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.datatables.xml.DoorData; import org.l2jmobius.gameserver.enums.ChatType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.ClanHallManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.instance.DecoInstance; @@ -274,7 +274,7 @@ public class BanditStrongholdSiege extends ClanHallSiege continue; } template = NpcTable.getInstance().getTemplate(35427 + mobCounter); - final MonsterInstance questMob = new MonsterInstance(IdFactory.getNextId(), template); + final MonsterInstance questMob = new MonsterInstance(IdManager.getInstance().getNextId(), template); questMob.setHeading(100); questMob.getStatus().setCurrentHpMp(questMob.getMaxHp(), questMob.getMaxMp()); if (mobCounter == 1) @@ -321,7 +321,7 @@ public class BanditStrongholdSiege extends ClanHallSiege { template = NpcTable.getInstance().getTemplate(35422 + flagCounter); } - final DecoInstance flag = new DecoInstance(IdFactory.getNextId(), template); + final DecoInstance flag = new DecoInstance(IdManager.getInstance().getNextId(), template); flag.setTitle(clan.getName()); flag.setHeading(100); flag.getStatus().setCurrentHpMp(flag.getMaxHp(), flag.getMaxMp()); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/siege/clanhalls/WildBeastFarmSiege.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/siege/clanhalls/WildBeastFarmSiege.java index 79fe0851d5..637eefa6a7 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/siege/clanhalls/WildBeastFarmSiege.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/entity/siege/clanhalls/WildBeastFarmSiege.java @@ -29,8 +29,8 @@ import org.l2jmobius.gameserver.datatables.sql.ClanTable; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.datatables.xml.DoorData; import org.l2jmobius.gameserver.enums.ChatType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.ClanHallManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.instance.DecoInstance; @@ -263,7 +263,7 @@ public class WildBeastFarmSiege extends ClanHallSiege NpcTemplate template; final Clan clan = ClanTable.getInstance().getClanByName(clanName); template = NpcTable.getInstance().getTemplate(35617 + mobCounter); - final MonsterInstance questMob = new MonsterInstance(IdFactory.getNextId(), template); + final MonsterInstance questMob = new MonsterInstance(IdManager.getInstance().getNextId(), template); questMob.setHeading(100); questMob.getStatus().setCurrentHpMp(questMob.getMaxHp(), questMob.getMaxMp()); if (mobCounter == 1) @@ -310,7 +310,7 @@ public class WildBeastFarmSiege extends ClanHallSiege { template = NpcTable.getInstance().getTemplate(35422 + flagCounter); } - final DecoInstance flag = new DecoInstance(IdFactory.getNextId(), template); + final DecoInstance flag = new DecoInstance(IdManager.getInstance().getNextId(), template); flag.setTitle(clan.getName()); flag.setHeading(100); flag.getStatus().setCurrentHpMp(flag.getMaxHp(), flag.getMaxMp()); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/skills/effects/EffectSignetMDam.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/skills/effects/EffectSignetMDam.java index ae2be6f7f2..b49e2366bf 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/skills/effects/EffectSignetMDam.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/skills/effects/EffectSignetMDam.java @@ -21,7 +21,7 @@ import java.util.List; import org.l2jmobius.gameserver.ai.CtrlEvent; import org.l2jmobius.gameserver.datatables.sql.NpcTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.Effect; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Skill; @@ -72,7 +72,7 @@ public class EffectSignetMDam extends Effect return; } - final EffectPointInstance effectPoint = new EffectPointInstance(IdFactory.getNextId(), template, getEffector()); + final EffectPointInstance effectPoint = new EffectPointInstance(IdManager.getInstance().getNextId(), template, getEffector()); effectPoint.getStatus().setCurrentHp(effectPoint.getMaxHp()); effectPoint.getStatus().setCurrentMp(effectPoint.getMaxMp()); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/skills/handlers/SkillSignet.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/skills/handlers/SkillSignet.java index e1e8b9dc6f..d7f28f1bac 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/skills/handlers/SkillSignet.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/skills/handlers/SkillSignet.java @@ -17,7 +17,7 @@ package org.l2jmobius.gameserver.model.skills.handlers; import org.l2jmobius.gameserver.datatables.sql.NpcTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.StatSet; @@ -49,7 +49,7 @@ public class SkillSignet extends Skill } final NpcTemplate template = NpcTable.getInstance().getTemplate(_effectNpcId); - final EffectPointInstance effectPoint = new EffectPointInstance(IdFactory.getNextId(), template, caster); + final EffectPointInstance effectPoint = new EffectPointInstance(IdManager.getInstance().getNextId(), template, caster); effectPoint.getStatus().setCurrentHp(effectPoint.getMaxHp()); effectPoint.getStatus().setCurrentMp(effectPoint.getMaxMp()); World.getInstance().storeObject(effectPoint); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/skills/handlers/SkillSummon.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/skills/handlers/SkillSummon.java index 56dc529a75..30af4bc9c5 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/skills/handlers/SkillSummon.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/skills/handlers/SkillSummon.java @@ -19,7 +19,7 @@ package org.l2jmobius.gameserver.model.skills.handlers; import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.datatables.xml.ExperienceData; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.World; @@ -206,11 +206,11 @@ public class SkillSummon extends Skill } if (summonTemplate.getType().equalsIgnoreCase("SiegeSummon")) { - summon = new SiegeSummonInstance(IdFactory.getNextId(), summonTemplate, activeChar, this); + summon = new SiegeSummonInstance(IdManager.getInstance().getNextId(), summonTemplate, activeChar, this); } else { - summon = new SummonInstance(IdFactory.getNextId(), summonTemplate, activeChar, this); + summon = new SummonInstance(IdManager.getInstance().getNextId(), summonTemplate, activeChar, this); } summon.setName(summonTemplate.getName()); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/spawn/AutoSpawn.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/spawn/AutoSpawn.java index 2e0852dbdd..9a5f3ab527 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/spawn/AutoSpawn.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/spawn/AutoSpawn.java @@ -34,7 +34,7 @@ import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.datatables.sql.SpawnTable; import org.l2jmobius.gameserver.datatables.xml.MapRegionData; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.actor.instance.NpcInstance; import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; @@ -140,7 +140,7 @@ public class AutoSpawn } } - final int newId = IdFactory.getNextId(); + final int newId = IdManager.getInstance().getNextId(); newSpawn._objectId = newId; synchronized (_registeredSpawns) diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/spawn/GroupSpawn.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/spawn/GroupSpawn.java index e0923087e9..a1c1a06ded 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/spawn/GroupSpawn.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/spawn/GroupSpawn.java @@ -20,7 +20,7 @@ import java.lang.reflect.Constructor; import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.datatables.sql.TerritoryTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.NpcInstance; import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; @@ -53,7 +53,7 @@ public class GroupSpawn extends Spawn final Object[] parameters = { - IdFactory.getNextId(), + IdManager.getInstance().getNextId(), _template }; final Object tmp = _constructor.newInstance(parameters); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/spawn/Spawn.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/spawn/Spawn.java index 561f51e011..14f743a500 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/spawn/Spawn.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/spawn/Spawn.java @@ -24,7 +24,7 @@ import java.util.logging.Logger; import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.datatables.sql.TerritoryTable; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.instance.NpcInstance; import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; @@ -384,7 +384,7 @@ public class Spawn // Get NpcInstance Init parameters and its generate an Identifier final Object[] parameters = { - IdFactory.getNextId(), + IdManager.getInstance().getNextId(), _template }; diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java index 8e5abfb890..1882eeec28 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java @@ -19,7 +19,7 @@ package org.l2jmobius.gameserver.model.zone; import java.awt.geom.Line2D; import org.l2jmobius.gameserver.datatables.xml.ZoneData; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; /** @@ -92,7 +92,7 @@ public abstract class ZoneForm protected static final void dropDebugItem(int id, int x, int y, int z) { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), 57); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 57); item.setCount(id); item.spawnMe(x, y, z + 5); ZoneData.getInstance().addDebugItem(item); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java index 9af167746a..2834d5d4c9 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java @@ -28,7 +28,7 @@ import org.l2jmobius.gameserver.datatables.sql.CharNameTable; import org.l2jmobius.gameserver.datatables.sql.SkillTreeTable; import org.l2jmobius.gameserver.datatables.xml.ExperienceData; import org.l2jmobius.gameserver.datatables.xml.PlayerTemplateData; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.QuestManager; import org.l2jmobius.gameserver.model.ShortCut; import org.l2jmobius.gameserver.model.SkillLearn; @@ -122,7 +122,7 @@ public class CharacterCreate extends GameClientPacket return; } - final int objectId = IdFactory.getNextId(); + final int objectId = IdManager.getInstance().getNextId(); newChar = PlayerInstance.create(objectId, template, getClient().getAccountName(), _name, _hairStyle, _hairColor, _face, _sex != 0); newChar.setCurrentHp(newChar.getMaxHp()); // L2Off like // newChar.setCurrentCp(template.baseCpMax); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/clientpackets/RequestExSetPledgeCrestLarge.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/clientpackets/RequestExSetPledgeCrestLarge.java index 13fce208cf..70d16b2268 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/clientpackets/RequestExSetPledgeCrestLarge.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/clientpackets/RequestExSetPledgeCrestLarge.java @@ -23,7 +23,7 @@ import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.cache.CrestCache; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -98,7 +98,7 @@ public class RequestExSetPledgeCrestLarge extends GameClientPacket } final CrestCache crestCache = CrestCache.getInstance(); - final int newId = IdFactory.getNextId(); + final int newId = IdManager.getInstance().getNextId(); if (!crestCache.savePledgeCrestLarge(newId, _data)) { LOGGER.warning("Error loading large crest of clan:" + clan.getName()); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/clientpackets/RequestSetAllyCrest.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/clientpackets/RequestSetAllyCrest.java index 26e18fa774..7089248770 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/clientpackets/RequestSetAllyCrest.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/clientpackets/RequestSetAllyCrest.java @@ -24,7 +24,7 @@ import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.cache.CrestCache; import org.l2jmobius.gameserver.datatables.sql.ClanTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -78,7 +78,7 @@ public class RequestSetAllyCrest extends GameClientPacket } final CrestCache crestCache = CrestCache.getInstance(); - final int newId = IdFactory.getNextId(); + final int newId = IdManager.getInstance().getNextId(); if (!crestCache.saveAllyCrest(newId, _data)) { LOGGER.warning("Error loading crest of ally:" + leaderclan.getAllyName()); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/clientpackets/RequestSetPledgeCrest.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/clientpackets/RequestSetPledgeCrest.java index bfd0156596..c8b78c953b 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/clientpackets/RequestSetPledgeCrest.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/clientpackets/RequestSetPledgeCrest.java @@ -23,7 +23,7 @@ import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.cache.CrestCache; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -105,7 +105,7 @@ public class RequestSetPledgeCrest extends GameClientPacket } final CrestCache crestCache = CrestCache.getInstance(); - final int newId = IdFactory.getNextId(); + final int newId = IdManager.getInstance().getNextId(); if (clan.hasCrest()) { crestCache.removePledgeCrest(newId); diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/util/MinionList.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/util/MinionList.java index 1f651cc097..ebf2d7d9ee 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/util/MinionList.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/util/MinionList.java @@ -27,7 +27,7 @@ import org.l2jmobius.Config; import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.ai.CtrlIntention; import org.l2jmobius.gameserver.datatables.sql.NpcTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.MinionData; import org.l2jmobius.gameserver.model.actor.instance.MinionInstance; import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance; @@ -198,7 +198,7 @@ public class MinionList *
  • Set the Minion HP, MP and Heading
  • *
  • Set the Minion leader to this RaidBoss
  • *
  • Init the position of the Minion and add it in the world as a visible object

  • - * @param minionid The I2NpcTemplate Identifier of the Minion to spawn + * @param minionid The NpcTemplate Identifier of the Minion to spawn */ public void spawnSingleMinion(int minionid) { @@ -206,7 +206,7 @@ public class MinionList final NpcTemplate minionTemplate = NpcTable.getInstance().getTemplate(minionid); // Create and Init the Minion and generate its Identifier - final MinionInstance monster = new MinionInstance(IdFactory.getNextId(), minionTemplate); + final MinionInstance monster = new MinionInstance(IdManager.getInstance().getNextId(), minionTemplate); // Set the Minion HP, MP and Heading monster.setCurrentHpMp(monster.getMaxHp(), monster.getMaxMp()); diff --git a/L2J_Mobius_C6_Interlude/dist/game/data/scripts/ai/others/FeedableBeasts.java b/L2J_Mobius_C6_Interlude/dist/game/data/scripts/ai/others/FeedableBeasts.java index 941e31d92b..eae701c7da 100644 --- a/L2J_Mobius_C6_Interlude/dist/game/data/scripts/ai/others/FeedableBeasts.java +++ b/L2J_Mobius_C6_Interlude/dist/game/data/scripts/ai/others/FeedableBeasts.java @@ -24,7 +24,7 @@ import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.ai.CtrlIntention; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.enums.ChatType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.actor.Attackable; import org.l2jmobius.gameserver.model.actor.instance.NpcInstance; @@ -404,7 +404,7 @@ public class FeedableBeasts extends Quest } final NpcTemplate template = NpcTable.getInstance().getTemplate(nextNpcId); - final TamedBeastInstance nextNpc = new TamedBeastInstance(IdFactory.getNextId(), template, player, food, npc.getX(), npc.getY(), npc.getZ()); + final TamedBeastInstance nextNpc = new TamedBeastInstance(IdManager.getInstance().getNextId(), template, player, food, npc.getX(), npc.getY(), npc.getZ()); nextNpc.setRunning(); // If player has Q020 going, give quest item diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/GameServer.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/GameServer.java index cef83f54a6..120665ea2b 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/GameServer.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/GameServer.java @@ -81,7 +81,6 @@ import org.l2jmobius.gameserver.handler.ItemHandler; import org.l2jmobius.gameserver.handler.SkillHandler; import org.l2jmobius.gameserver.handler.UserCommandHandler; import org.l2jmobius.gameserver.handler.VoicedCommandHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AuctionManager; import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CastleManorManager; @@ -99,6 +98,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.FourSepulchersManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.MercTicketManager; import org.l2jmobius.gameserver.instancemanager.PetitionManager; @@ -177,9 +177,9 @@ public class GameServer ThreadPool.scheduleAtFixedRate(DeadlockDetector.getInstance(), Config.DEADLOCKCHECK_INTIAL_TIME, Config.DEADLOCKCHECK_DELAY_TIME); } - Util.printSection("IdFactory"); - IdFactory.init(); - if (!IdFactory.hasInitialized()) + Util.printSection("IdManager"); + IdManager.getInstance(); + if (!IdManager.hasInitialized()) { LOGGER.severe("IdFactory: Could not read object IDs from database. Please check your configuration."); throw new Exception("Could not initialize the ID factory!"); @@ -404,7 +404,7 @@ public class GameServer Util.printSection("Game Server"); - LOGGER.info("IdFactory: Free ObjectID's remaining: " + IdFactory.size()); + LOGGER.info("IdFactory: Free ObjectID's remaining: " + IdManager.size()); if (Config.ALLOW_WEDDING) { diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/cache/CrestCache.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/cache/CrestCache.java index 40d063ffe1..3de272a969 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/cache/CrestCache.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/cache/CrestCache.java @@ -31,7 +31,7 @@ import java.util.logging.Logger; import org.l2jmobius.Config; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.datatables.sql.ClanTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.clan.Clan; /** @@ -135,7 +135,7 @@ public class CrestCache LOGGER.info("Found old crest file \"" + file.getName() + "\" for clanId " + clanId); - final int newId = IdFactory.getNextId(); + final int newId = IdManager.getInstance().getNextId(); final Clan clan = ClanTable.getInstance().getClan(clanId); if (clan != null) { diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/ItemTable.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/ItemTable.java index 4de7d29d95..1af1ad4b04 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/ItemTable.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/ItemTable.java @@ -32,7 +32,7 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.datatables.sql.PetDataTable; import org.l2jmobius.gameserver.engines.DocumentEngine; import org.l2jmobius.gameserver.engines.ItemDataHolder; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Attackable; @@ -178,7 +178,7 @@ public class ItemTable public ItemInstance createItem(String process, int itemId, int count, PlayerInstance actor, WorldObject reference) { // Create and Init the ItemInstance corresponding to the Item Identifier - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); // create loot schedule also if autoloot is enabled if (process.equalsIgnoreCase("loot")/* && !Config.AUTO_LOOT */) @@ -293,7 +293,7 @@ public class ItemTable item.setLastChange(ItemInstance.REMOVED); World.getInstance().removeObject(item); - IdFactory.releaseId(item.getObjectId()); + IdManager.getInstance().releaseId(item.getObjectId()); // if it's a pet control item, delete the pet as well if (PetDataTable.isPetItem(item.getItemId())) diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/sql/ClanTable.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/sql/ClanTable.java index 83b50e9571..db70e81ace 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/sql/ClanTable.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/sql/ClanTable.java @@ -29,9 +29,9 @@ import java.util.regex.PatternSyntaxException; import org.l2jmobius.Config; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.SiegeManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -189,7 +189,7 @@ public class ClanTable return null; } - final Clan clan = new Clan(IdFactory.getNextId(), clanName); + final Clan clan = new Clan(IdManager.getInstance().getNextId(), clanName); final ClanMember leader = new ClanMember(clan, player.getName(), player.getLevel(), player.getClassId().getId(), player.getObjectId(), player.getPledgeType(), player.getPowerGrade(), player.getTitle()); clan.setLeader(leader); @@ -323,7 +323,7 @@ public class ClanTable final int clanLvl = clan.getLevel(); _clans.remove(clanId); - IdFactory.releaseId(clanId); + IdManager.getInstance().releaseId(clanId); try (Connection con = DatabaseFactory.getConnection()) { diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/BoatData.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/BoatData.java index f00007ec8a..04f58f5001 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/BoatData.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/BoatData.java @@ -29,7 +29,7 @@ import org.w3c.dom.Node; import org.l2jmobius.Config; import org.l2jmobius.commons.util.IXmlReader; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.actor.instance.BoatInstance; import org.l2jmobius.gameserver.model.actor.templates.CreatureTemplate; @@ -122,7 +122,7 @@ public class BoatData implements IXmlReader npcDat.set("baseMDef", 100); final CreatureTemplate template = new CreatureTemplate(npcDat); - final BoatInstance boat = new BoatInstance(IdFactory.getNextId(), template); + final BoatInstance boat = new BoatInstance(IdManager.getInstance().getNextId(), template); boat.getPosition().setHeading(set.getInt("heading")); boat.setXYZ(set.getInt("spawnX"), set.getInt("spawnY"), set.getInt("spawnZ")); boat.setPathA(set.getInt("pathIdA"), set.getInt("ticketA"), set.getInt("xTeleNoTicketA"), set.getInt("yTeleNoTicketA"), set.getInt("zTeleNoTicketA"), set.getString("announcerA"), set.getString("message10A"), set.getString("message5A"), set.getString("message1A"), set.getString("message0A"), set.getString("messageBeginA"), paths.get(set.getInt("pathIdA"))); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/DoorData.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/DoorData.java index c459defcfc..fe58b5f20d 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/DoorData.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/DoorData.java @@ -27,8 +27,8 @@ import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.l2jmobius.commons.util.IXmlReader; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.ClanHallManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.actor.instance.DoorInstance; @@ -176,7 +176,7 @@ public class DoorData implements IXmlReader npcDat.set("baseMDef", mDef); final CreatureTemplate template = new CreatureTemplate(npcDat); - final DoorInstance door = new DoorInstance(IdFactory.getNextId(), template, id, name, unlockable); + final DoorInstance door = new DoorInstance(IdManager.getInstance().getNextId(), template, id, name, unlockable); door.setRange(xMin, yMin, zMin, xMax, yMax, zMax); try { diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/StaticObjectData.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/StaticObjectData.java index fabfa530f6..c4a7773519 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/StaticObjectData.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/StaticObjectData.java @@ -26,7 +26,7 @@ import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.l2jmobius.commons.util.IXmlReader; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.actor.instance.StaticObjectInstance; import org.l2jmobius.gameserver.network.serverpackets.StaticObject; @@ -74,7 +74,7 @@ public class StaticObjectData implements IXmlReader } // Create and spawn the StaticObject instance. - final StaticObjectInstance obj = new StaticObjectInstance(IdFactory.getNextId()); + final StaticObjectInstance obj = new StaticObjectInstance(IdManager.getInstance().getNextId()); obj.setType(set.getInt("type")); obj.setStaticObjectId(set.getInt("id")); obj.setXYZ(set.getInt("x"), set.getInt("y"), set.getInt("z")); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminFightCalculator.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminFightCalculator.java index 7389424711..0a5d87e3c4 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminFightCalculator.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminFightCalculator.java @@ -21,7 +21,7 @@ import java.util.StringTokenizer; import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.handler.IAdminCommandHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; @@ -205,8 +205,8 @@ public class AdminFightCalculator implements IAdminCommandHandler final StringTokenizer st = new StringTokenizer(trimmedParams); mid1 = Integer.parseInt(st.nextToken()); mid2 = Integer.parseInt(st.nextToken()); - npc1 = new MonsterInstance(IdFactory.getNextId(), NpcTable.getInstance().getTemplate(mid1)); - npc2 = new MonsterInstance(IdFactory.getNextId(), NpcTable.getInstance().getTemplate(mid2)); + npc1 = new MonsterInstance(IdManager.getInstance().getNextId(), NpcTable.getInstance().getTemplate(mid1)); + npc2 = new MonsterInstance(IdManager.getInstance().getNextId(), NpcTable.getInstance().getTemplate(mid2)); } int miss1 = 0; diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/itemhandlers/ChristmasTree.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/itemhandlers/ChristmasTree.java index 3af7c3180c..735d5b2e23 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/itemhandlers/ChristmasTree.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/itemhandlers/ChristmasTree.java @@ -19,7 +19,7 @@ package org.l2jmobius.gameserver.handler.itemhandlers; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.handler.IItemHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.actor.instance.NpcInstance; @@ -72,7 +72,7 @@ public class ChristmasTree implements IItemHandler try { final Spawn spawn = new Spawn(template1); - spawn.setId(IdFactory.getNextId()); + spawn.setId(IdManager.getInstance().getNextId()); spawn.setX(target.getX()); spawn.setY(target.getY()); spawn.setZ(target.getZ()); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/itemhandlers/JackpotSeed.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/itemhandlers/JackpotSeed.java index c78d96dccc..335e5bed43 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/itemhandlers/JackpotSeed.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/itemhandlers/JackpotSeed.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.handler.itemhandlers; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.handler.IItemHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Playable; import org.l2jmobius.gameserver.model.actor.instance.GourdInstance; @@ -64,7 +64,7 @@ public class JackpotSeed implements IItemHandler try { final Spawn spawn = new Spawn(template1); - spawn.setId(IdFactory.getNextId()); + spawn.setId(IdManager.getInstance().getNextId()); spawn.setX(player.getX()); spawn.setY(player.getY()); spawn.setZ(player.getZ()); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/itemhandlers/SummonItems.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/itemhandlers/SummonItems.java index b4fd6ffba0..1a8d3fbad5 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/itemhandlers/SummonItems.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/itemhandlers/SummonItems.java @@ -22,7 +22,7 @@ import org.l2jmobius.gameserver.datatables.SkillTable; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.datatables.xml.SummonItemData; import org.l2jmobius.gameserver.handler.IItemHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.SummonItem; import org.l2jmobius.gameserver.model.World; @@ -145,7 +145,7 @@ public class SummonItems implements IItemHandler try { final Spawn spawn = new Spawn(npcTemplate); - spawn.setId(IdFactory.getNextId()); + spawn.setId(IdManager.getInstance().getNextId()); spawn.setX(player.getX()); spawn.setY(player.getY()); spawn.setZ(player.getZ()); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/skillhandlers/SiegeFlag.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/skillhandlers/SiegeFlag.java index b8dbe76810..3b61e6c448 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/skillhandlers/SiegeFlag.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/handler/skillhandlers/SiegeFlag.java @@ -18,10 +18,10 @@ package org.l2jmobius.gameserver.handler.skillhandlers; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.handler.ISkillHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.SiegeManager; import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.Skill.SkillType; @@ -79,7 +79,7 @@ public class SiegeFlag implements ISkillHandler try { // Spawn a new flag - final SiegeFlagInstance flag = new SiegeFlagInstance(player, IdFactory.getNextId(), NpcTable.getInstance().getTemplate(35062)); + final SiegeFlagInstance flag = new SiegeFlagInstance(player, IdManager.getInstance().getNextId(), NpcTable.getInstance().getTemplate(35062)); if (skill.isAdvancedFlag()) { flag.setAdvanceFlag(true); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/instancemanager/ChristmasManager.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/instancemanager/ChristmasManager.java index c3fde3dc03..cff2d4d55d 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/instancemanager/ChristmasManager.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/instancemanager/ChristmasManager.java @@ -27,7 +27,6 @@ import org.l2jmobius.gameserver.datatables.ItemTable; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.datatables.sql.SpawnTable; import org.l2jmobius.gameserver.enums.ChatType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Attackable; @@ -467,7 +466,7 @@ public class ChristmasManager { final NpcTemplate template1 = NpcTable.getInstance().getTemplate(id); final Spawn spawn = new Spawn(template1); - spawn.setId(IdFactory.getNextId()); + spawn.setId(IdManager.getInstance().getNextId()); spawn.setX(x); spawn.setY(y); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/idfactory/IdFactory.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/instancemanager/IdManager.java similarity index 74% rename from L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/idfactory/IdFactory.java rename to L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/instancemanager/IdManager.java index a1d48f9fe3..39e7489d51 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/idfactory/IdFactory.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/instancemanager/IdManager.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.l2jmobius.gameserver.idfactory; +package org.l2jmobius.gameserver.instancemanager; import java.sql.Connection; import java.sql.PreparedStatement; @@ -32,35 +32,12 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.util.PrimeFinder; /** - * @author Mobius (reworked from L2J version) + * @author Mobius (reworked from L2J IdFactory) */ -public abstract class IdFactory +public class IdManager { - private static final Logger LOGGER = Logger.getLogger(IdFactory.class.getName()); + private static final Logger LOGGER = Logger.getLogger(IdManager.class.getName()); - protected static final String[] ID_CHECKS = - { - "SELECT owner_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT object_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT char_id FROM character_quests WHERE char_id >= ? AND char_id < ?", - "SELECT char_id FROM character_friends WHERE char_id >= ? AND char_id < ?", - "SELECT char_id FROM character_friends WHERE friend_id >= ? AND friend_id < ?", - "SELECT char_obj_id FROM character_hennas WHERE char_obj_id >= ? AND char_obj_id < ?", - "SELECT char_id FROM character_recipebook WHERE char_id >= ? AND char_id < ?", - "SELECT char_obj_id FROM character_shortcuts WHERE char_obj_id >= ? AND char_obj_id < ?", - "SELECT char_obj_id FROM character_macroses WHERE char_obj_id >= ? AND char_obj_id < ?", - "SELECT char_obj_id FROM character_skills WHERE char_obj_id >= ? AND char_obj_id < ?", - "SELECT char_obj_id FROM character_skills_save WHERE char_obj_id >= ? AND char_obj_id < ?", - "SELECT char_obj_id FROM character_subclasses WHERE char_obj_id >= ? AND char_obj_id < ?", - "SELECT obj_Id FROM characters WHERE obj_Id >= ? AND obj_Id < ?", - "SELECT clanid FROM characters WHERE clanid >= ? AND clanid < ?", - "SELECT clan_id FROM clan_data WHERE clan_id >= ? AND clan_id < ?", - "SELECT clan_id FROM siege_clans WHERE clan_id >= ? AND clan_id < ?", - "SELECT ally_id FROM clan_data WHERE ally_id >= ? AND ally_id < ?", - "SELECT leader_id FROM clan_data WHERE leader_id >= ? AND leader_id < ?", - "SELECT item_obj_id FROM pets WHERE item_obj_id >= ? AND item_obj_id < ?", - "SELECT object_id FROM itemsonground WHERE object_id >= ? AND object_id < ?" - }; //@formatter:off private static final String[][] ID_EXTRACTS = { @@ -70,20 +47,22 @@ public abstract class IdFactory {"itemsonground","object_id"} }; //@formatter:on + private static final String[] TIMESTAMPS_CLEAN = { "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" }; - public static final int FIRST_OID = 0x10000000; - public static final int LAST_OID = 0x7FFFFFFF; - public static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; + + private static final int FIRST_OID = 0x10000000; + private static final int LAST_OID = 0x7FFFFFFF; + private static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; private static BitSet _freeIds; private static AtomicInteger _freeIdCount; private static AtomicInteger _nextFreeId; private static boolean _initialized; - public static void init() + public IdManager() { // Update characters online status. try (Connection con = DatabaseFactory.getConnection(); @@ -94,7 +73,7 @@ public abstract class IdFactory } catch (Exception e) { - LOGGER.warning("IdFactory: Could not update characters online status: " + e); + LOGGER.warning("IdManager: Could not update characters online status: " + e); } // Cleanup database. @@ -146,11 +125,11 @@ public abstract class IdFactory cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id NOT IN (SELECT obj_Id FROM characters) AND items.owner_id NOT IN (SELECT clan_id FROM clan_data);"); statement.executeUpdate("UPDATE characters SET clanid=0 WHERE characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); - LOGGER.info("IdFactory: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); + LOGGER.info("IdManager: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); } catch (Exception e) { - LOGGER.warning("IdFactory: Could not clean up database: " + e); + LOGGER.warning("IdManager: Could not clean up database: " + e); } // Cleanup timestamps. @@ -165,11 +144,11 @@ public abstract class IdFactory cleanCount += statement.executeUpdate(); } } - LOGGER.info("IdFactory: Cleaned " + cleanCount + " expired timestamps from database."); + LOGGER.info("IdManager: Cleaned " + cleanCount + " expired timestamps from database."); } catch (Exception e) { - LOGGER.warning("IdFactory: Could not clean expired timestamps from database. " + e); + LOGGER.warning("IdManager: Could not clean expired timestamps from database. " + e); } // Initialize. @@ -206,7 +185,7 @@ public abstract class IdFactory final int objectId = usedObjectId - FIRST_OID; if (objectId < 0) { - LOGGER.warning("IdFactory: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); + LOGGER.warning("IdManager: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); continue; } _freeIds.set(usedObjectId - FIRST_OID); @@ -219,7 +198,7 @@ public abstract class IdFactory catch (Exception e) { _initialized = false; - LOGGER.severe("IdFactory: Could not be initialized properly: " + e.getMessage()); + LOGGER.severe("IdManager: Could not be initialized properly: " + e.getMessage()); } // Schedule increase capacity task. @@ -234,10 +213,10 @@ public abstract class IdFactory } }, 30000, 30000); - LOGGER.info("IdFactory: " + _freeIds.size() + " id's available."); + LOGGER.info("IdManager: " + _freeIds.size() + " id's available."); } - public synchronized static void releaseId(int objectId) + public void releaseId(int objectId) { synchronized (_nextFreeId) { @@ -248,12 +227,12 @@ public abstract class IdFactory } else { - LOGGER.warning("IdFactory: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); + LOGGER.warning("IdManager: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); } } } - public synchronized static int getNextId() + public int getNextId() { synchronized (_nextFreeId) { @@ -266,7 +245,7 @@ public abstract class IdFactory { if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) { - throw new NullPointerException("IdFactory: Ran out of valid ids."); + throw new NullPointerException("IdManager: Ran out of valid ids."); } increaseBitSetCapacity(); } @@ -276,14 +255,14 @@ public abstract class IdFactory } } - private static void increaseBitSetCapacity() + private void increaseBitSetCapacity() { final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); newBitSet.or(_freeIds); _freeIds = newBitSet; } - private static int usedIdCount() + private int usedIdCount() { return _freeIdCount.get() - FIRST_OID; } @@ -297,4 +276,14 @@ public abstract class IdFactory { return _initialized; } + + public static IdManager getInstance() + { + return SingletonHolder.INSTANCE; + } + + private static class SingletonHolder + { + protected static final IdManager INSTANCE = new IdManager(); + } } diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/instancemanager/MercTicketManager.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/instancemanager/MercTicketManager.java index 125d2fb3d6..600f46ffbe 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/instancemanager/MercTicketManager.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/instancemanager/MercTicketManager.java @@ -27,7 +27,6 @@ import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.handler.AutoChatHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.SiegeGuardInstance; @@ -714,7 +713,7 @@ public class MercTicketManager { itemId = ITEM_IDS[i]; // create the ticket in the gameworld - final ItemInstance dropticket = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance dropticket = new ItemInstance(IdManager.getInstance().getNextId(), itemId); dropticket.setLocation(ItemInstance.ItemLocation.VOID); dropticket.dropMe(null, x, y, z); dropticket.setDropTime(0); // avoids it from beeing removed by the auto item destroyer @@ -761,9 +760,9 @@ public class MercTicketManager int count = 0; ItemInstance ticket; - for (int i = 0; i < _droppedTickets.size(); i++) + for (ItemInstance _droppedTicket : _droppedTickets) { - ticket = _droppedTickets.get(i); + ticket = _droppedTicket; if ((ticket != null) && (ticket.getItemId() == itemId)) { count++; @@ -794,9 +793,9 @@ public class MercTicketManager int count = 0; ItemInstance ticket; - for (int i = 0; i < _droppedTickets.size(); i++) + for (ItemInstance _droppedTicket : _droppedTickets) { - ticket = _droppedTickets.get(i); + ticket = _droppedTicket; if ((ticket != null) && (getTicketCastleId(ticket.getItemId()) == castleId)) { count++; @@ -837,7 +836,7 @@ public class MercTicketManager castle.getSiege().getSiegeGuardManager().hireMerc(x, y, z, heading, NPC_IDS[i]); // create the ticket in the gameworld - final ItemInstance dropticket = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance dropticket = new ItemInstance(IdManager.getInstance().getNextId(), itemId); dropticket.setLocation(ItemInstance.ItemLocation.INVENTORY); dropticket.dropMe(null, x, y, z); dropticket.setDropTime(0); // avoids it from beeing removed by the auto item destroyer @@ -856,7 +855,7 @@ public class MercTicketManager final NpcTemplate template = NpcTable.getInstance().getTemplate(npcId); if (template != null) { - final SiegeGuardInstance npc = new SiegeGuardInstance(IdFactory.getNextId(), template); + final SiegeGuardInstance npc = new SiegeGuardInstance(IdManager.getInstance().getNextId(), template); npc.setCurrentHpMp(npc.getMaxHp(), npc.getMaxMp()); npc.setDecayed(false); npc.spawnMe(x, y, (z + 20)); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/instancemanager/PetitionManager.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/instancemanager/PetitionManager.java index 7d5e3a0fe2..5a87f61d27 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/instancemanager/PetitionManager.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/instancemanager/PetitionManager.java @@ -27,7 +27,6 @@ import java.util.logging.Logger; import org.l2jmobius.Config; import org.l2jmobius.gameserver.datatables.xml.AdminData; import org.l2jmobius.gameserver.enums.ChatType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.serverpackets.CreatureSay; @@ -88,7 +87,7 @@ public class PetitionManager public Petition(PlayerInstance petitioner, String petitionText, int petitionType) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); if ((petitionType - 1) >= PetitionType.values().length) { LOGGER.warning("PetitionManager:Petition : invalid petition type (received type was +1) : " + petitionType); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/WorldObject.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/WorldObject.java index ccdd9062be..13cc9642df 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/WorldObject.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/WorldObject.java @@ -19,7 +19,7 @@ package org.l2jmobius.gameserver.model; import java.util.logging.Logger; import org.l2jmobius.Config; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.MercTicketManager; import org.l2jmobius.gameserver.model.actor.Creature; @@ -193,8 +193,8 @@ public abstract class WorldObject public void refreshId() { World.getInstance().removeObject(this); - IdFactory.releaseId(getObjectId()); - _objectId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(getObjectId()); + _objectId = IdManager.getInstance().getNextId(); } /** diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java index cc78bd8f63..b94806695b 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.actor.instance; import org.l2jmobius.gameserver.datatables.xml.FenceData; import org.l2jmobius.gameserver.enums.FenceState; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.network.serverpackets.DeleteObject; @@ -42,7 +42,7 @@ public class FenceInstance extends WorldObject public FenceInstance(int x, int y, String name, int width, int length, int height, FenceState state) { - super(IdFactory.getNextId()); + super(IdManager.getInstance().getNextId()); _xMin = x - (width / 2); _xMax = x + (width / 2); @@ -57,7 +57,7 @@ public class FenceInstance extends WorldObject _heightFences = new int[height - 1]; for (int i = 0; i < _heightFences.length; i++) { - _heightFences[i] = IdFactory.getNextId(); + _heightFences[i] = IdManager.getInstance().getNextId(); } } } diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/NpcInstance.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/NpcInstance.java index 0be8e6f73b..591f4e66a8 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/NpcInstance.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/NpcInstance.java @@ -35,10 +35,10 @@ import org.l2jmobius.gameserver.datatables.sql.SpawnTable; import org.l2jmobius.gameserver.datatables.xml.MultisellData; import org.l2jmobius.gameserver.datatables.xml.ZoneData; import org.l2jmobius.gameserver.enums.ChatType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.DimensionalRiftManager; import org.l2jmobius.gameserver.instancemanager.FortManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.QuestManager; import org.l2jmobius.gameserver.instancemanager.RaidBossSpawnManager; import org.l2jmobius.gameserver.model.DropCategory; @@ -2012,7 +2012,7 @@ public class NpcInstance extends Creature sm.addItemName(4442); player.sendPacket(sm); - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), 4442); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 4442); item.setCount(1); item.setCustomType1(lotonumber); item.setEnchantLevel(enchant); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PetInstance.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PetInstance.java index 247a6300c1..64f1945715 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PetInstance.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PetInstance.java @@ -27,8 +27,8 @@ import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.ai.CtrlIntention; import org.l2jmobius.gameserver.datatables.sql.PetDataTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.CursedWeaponsManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.model.PetData; import org.l2jmobius.gameserver.model.Skill; @@ -829,11 +829,11 @@ public class PetInstance extends Summon { if (template.getType().equalsIgnoreCase("BabyPet")) { - pet = new BabyPetInstance(IdFactory.getNextId(), template, owner, control); + pet = new BabyPetInstance(IdManager.getInstance().getNextId(), template, owner, control); } else { - pet = new PetInstance(IdFactory.getNextId(), template, owner, control); + pet = new PetInstance(IdManager.getInstance().getNextId(), template, owner, control); } final PreparedStatement statement = con.prepareStatement("SELECT item_obj_id, name, level, curHp, curMp, exp, sp, karma, pkkills, fed FROM pets WHERE item_obj_id=?"); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java index a42846b5f8..f12e26a027 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java @@ -21,7 +21,7 @@ import java.util.Locale; import org.l2jmobius.Config; import org.l2jmobius.commons.util.StringUtil; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; import org.l2jmobius.gameserver.model.entity.event.MonsterRace; import org.l2jmobius.gameserver.model.entity.event.MonsterRace.HistoryInfo; @@ -160,7 +160,7 @@ public class RaceManagerInstance extends FolkInstance player.setRace(0, 0); player.setRace(1, 0); - ItemInstance item = new ItemInstance(IdFactory.getNextId(), 4443); + ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 4443); item.setCount(1); item.setEnchantLevel(MonsterRace.getInstance().getRaceNumber()); item.setCustomType1(ticket); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/Auction.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/Auction.java index fb5bab7dfb..f71e44499e 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/Auction.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/Auction.java @@ -27,9 +27,9 @@ import java.util.logging.Logger; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.datatables.sql.ClanTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AuctionManager; import org.l2jmobius.gameserver.instancemanager.ClanHallManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -396,7 +396,7 @@ public class Auction else { statement = con.prepareStatement("INSERT INTO auction_bid (id, auctionId, bidderId, bidderName, maxBid, clan_name, time_bid) VALUES (?, ?, ?, ?, ?, ?, ?)"); - statement.setInt(1, IdFactory.getNextId()); + statement.setInt(1, IdManager.getInstance().getNextId()); statement.setInt(2, _id); statement.setInt(3, bidder.getClanId()); statement.setString(4, bidder.getName()); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/Wedding.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/Wedding.java index d224e930b3..5dafe93861 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/Wedding.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/Wedding.java @@ -23,7 +23,7 @@ import java.util.Calendar; import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; /** @@ -90,7 +90,7 @@ public class Wedding try (Connection con = DatabaseFactory.getConnection()) { PreparedStatement statement; - _Id = IdFactory.getNextId(); + _Id = IdManager.getInstance().getNextId(); statement = con.prepareStatement("INSERT INTO mods_wedding (id, player1Id, player2Id, married, affianceDate, weddingDate) VALUES (?, ?, ?, ?, ?, ?)"); statement.setInt(1, _Id); statement.setInt(2, _player1Id); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/event/MonsterRace.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/event/MonsterRace.java index 1ca61c4fe6..2a694a1b2a 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/event/MonsterRace.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/event/MonsterRace.java @@ -35,7 +35,7 @@ import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.datatables.sql.NpcTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.NpcInstance; import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; import org.l2jmobius.gameserver.model.zone.type.DerbyTrackZone; @@ -327,7 +327,7 @@ public class MonsterRace { final NpcTemplate template = NpcTable.getInstance().getTemplate(_npcTemplates.get(i)); _constructor = Class.forName("org.l2jmobius.gameserver.model.actor.instance." + template.getType() + "Instance").getConstructors()[0]; - final int objectId = IdFactory.getNextId(); + final int objectId = IdManager.getInstance().getNextId(); _monsters[i] = (NpcInstance) _constructor.newInstance(objectId, template); } catch (Exception e) diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/siege/FortSiege.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/siege/FortSiege.java index 6bcb1e5fbe..b5972e1bb4 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/siege/FortSiege.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/siege/FortSiege.java @@ -29,10 +29,10 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.datatables.sql.ClanTable; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.enums.TeleportWhereType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.FortSiegeGuardManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager.SiegeSpawn; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MercTicketManager; import org.l2jmobius.gameserver.model.SiegeClan; import org.l2jmobius.gameserver.model.SiegeClan.SiegeClanType; @@ -1299,7 +1299,7 @@ public class FortSiege for (SiegeSpawn _sp : FortSiegeManager.getInstance().getCommanderSpawnList(id)) { CommanderInstance commander; - commander = new CommanderInstance(IdFactory.getNextId(), NpcTable.getInstance().getTemplate(_sp.getNpcId())); + commander = new CommanderInstance(IdManager.getInstance().getNextId(), NpcTable.getInstance().getTemplate(_sp.getNpcId())); commander.setCurrentHpMp(commander.getMaxHp(), commander.getMaxMp()); commander.setHeading(_sp.getLocation().getHeading()); commander.spawnMe(_sp.getLocation().getX(), _sp.getLocation().getY(), _sp.getLocation().getZ() + 50); @@ -1321,7 +1321,7 @@ public class FortSiege for (SiegeSpawn _sp : FortSiegeManager.getInstance().getFlagList(id)) { ArtefactInstance combatflag; - combatflag = new ArtefactInstance(IdFactory.getNextId(), NpcTable.getInstance().getTemplate(_sp.getNpcId())); + combatflag = new ArtefactInstance(IdManager.getInstance().getNextId(), NpcTable.getInstance().getTemplate(_sp.getNpcId())); combatflag.setCurrentHpMp(combatflag.getMaxHp(), combatflag.getMaxMp()); combatflag.setHeading(_sp.getLocation().getHeading()); combatflag.spawnMe(_sp.getLocation().getX(), _sp.getLocation().getY(), _sp.getLocation().getZ() + 10); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/siege/Siege.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/siege/Siege.java index b31ca6f816..be0626aa62 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/siege/Siege.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/siege/Siege.java @@ -31,7 +31,7 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.datatables.sql.ClanTable; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.enums.TeleportWhereType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MercTicketManager; import org.l2jmobius.gameserver.instancemanager.SiegeGuardManager; import org.l2jmobius.gameserver.instancemanager.SiegeManager; @@ -1518,7 +1518,7 @@ public class Siege for (SiegeSpawn _sp : SiegeManager.getInstance().getArtefactSpawnList(id)) { ArtefactInstance art; - art = new ArtefactInstance(IdFactory.getNextId(), NpcTable.getInstance().getTemplate(_sp.getNpcId())); + art = new ArtefactInstance(IdManager.getInstance().getNextId(), NpcTable.getInstance().getTemplate(_sp.getNpcId())); art.setCurrentHpMp(art.getMaxHp(), art.getMaxMp()); art.setHeading(_sp.getLocation().getHeading()); art.spawnMe(_sp.getLocation().getX(), _sp.getLocation().getY(), _sp.getLocation().getZ() + 50); @@ -1544,7 +1544,7 @@ public class Siege final NpcTemplate template = NpcTable.getInstance().getTemplate(_sp.getNpcId()); template.getStatSet().set("baseHpMax", _sp.getHp()); - ct = new ControlTowerInstance(IdFactory.getNextId(), template); + ct = new ControlTowerInstance(IdManager.getInstance().getNextId(), template); ct.setCurrentHpMp(ct.getMaxHp(), ct.getMaxMp()); ct.spawnMe(_sp.getLocation().getX(), _sp.getLocation().getY(), _sp.getLocation().getZ() + 20); _controlTowerCount++; diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/siege/clanhalls/BanditStrongholdSiege.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/siege/clanhalls/BanditStrongholdSiege.java index baba2bbf9e..3e4aed322b 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/siege/clanhalls/BanditStrongholdSiege.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/siege/clanhalls/BanditStrongholdSiege.java @@ -29,8 +29,8 @@ import org.l2jmobius.gameserver.datatables.sql.ClanTable; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.datatables.xml.DoorData; import org.l2jmobius.gameserver.enums.ChatType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.ClanHallManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.instance.DecoInstance; @@ -274,7 +274,7 @@ public class BanditStrongholdSiege extends ClanHallSiege continue; } template = NpcTable.getInstance().getTemplate(35427 + mobCounter); - final MonsterInstance questMob = new MonsterInstance(IdFactory.getNextId(), template); + final MonsterInstance questMob = new MonsterInstance(IdManager.getInstance().getNextId(), template); questMob.setHeading(100); questMob.getStatus().setCurrentHpMp(questMob.getMaxHp(), questMob.getMaxMp()); if (mobCounter == 1) @@ -321,7 +321,7 @@ public class BanditStrongholdSiege extends ClanHallSiege { template = NpcTable.getInstance().getTemplate(35422 + flagCounter); } - final DecoInstance flag = new DecoInstance(IdFactory.getNextId(), template); + final DecoInstance flag = new DecoInstance(IdManager.getInstance().getNextId(), template); flag.setTitle(clan.getName()); flag.setHeading(100); flag.getStatus().setCurrentHpMp(flag.getMaxHp(), flag.getMaxMp()); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/siege/clanhalls/WildBeastFarmSiege.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/siege/clanhalls/WildBeastFarmSiege.java index 79fe0851d5..637eefa6a7 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/siege/clanhalls/WildBeastFarmSiege.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/entity/siege/clanhalls/WildBeastFarmSiege.java @@ -29,8 +29,8 @@ import org.l2jmobius.gameserver.datatables.sql.ClanTable; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.datatables.xml.DoorData; import org.l2jmobius.gameserver.enums.ChatType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.ClanHallManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.instance.DecoInstance; @@ -263,7 +263,7 @@ public class WildBeastFarmSiege extends ClanHallSiege NpcTemplate template; final Clan clan = ClanTable.getInstance().getClanByName(clanName); template = NpcTable.getInstance().getTemplate(35617 + mobCounter); - final MonsterInstance questMob = new MonsterInstance(IdFactory.getNextId(), template); + final MonsterInstance questMob = new MonsterInstance(IdManager.getInstance().getNextId(), template); questMob.setHeading(100); questMob.getStatus().setCurrentHpMp(questMob.getMaxHp(), questMob.getMaxMp()); if (mobCounter == 1) @@ -310,7 +310,7 @@ public class WildBeastFarmSiege extends ClanHallSiege { template = NpcTable.getInstance().getTemplate(35422 + flagCounter); } - final DecoInstance flag = new DecoInstance(IdFactory.getNextId(), template); + final DecoInstance flag = new DecoInstance(IdManager.getInstance().getNextId(), template); flag.setTitle(clan.getName()); flag.setHeading(100); flag.getStatus().setCurrentHpMp(flag.getMaxHp(), flag.getMaxMp()); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/skills/effects/EffectSignetMDam.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/skills/effects/EffectSignetMDam.java index ae2be6f7f2..b49e2366bf 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/skills/effects/EffectSignetMDam.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/skills/effects/EffectSignetMDam.java @@ -21,7 +21,7 @@ import java.util.List; import org.l2jmobius.gameserver.ai.CtrlEvent; import org.l2jmobius.gameserver.datatables.sql.NpcTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.Effect; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Skill; @@ -72,7 +72,7 @@ public class EffectSignetMDam extends Effect return; } - final EffectPointInstance effectPoint = new EffectPointInstance(IdFactory.getNextId(), template, getEffector()); + final EffectPointInstance effectPoint = new EffectPointInstance(IdManager.getInstance().getNextId(), template, getEffector()); effectPoint.getStatus().setCurrentHp(effectPoint.getMaxHp()); effectPoint.getStatus().setCurrentMp(effectPoint.getMaxMp()); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/skills/handlers/SkillSignet.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/skills/handlers/SkillSignet.java index e1e8b9dc6f..d7f28f1bac 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/skills/handlers/SkillSignet.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/skills/handlers/SkillSignet.java @@ -17,7 +17,7 @@ package org.l2jmobius.gameserver.model.skills.handlers; import org.l2jmobius.gameserver.datatables.sql.NpcTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.StatSet; @@ -49,7 +49,7 @@ public class SkillSignet extends Skill } final NpcTemplate template = NpcTable.getInstance().getTemplate(_effectNpcId); - final EffectPointInstance effectPoint = new EffectPointInstance(IdFactory.getNextId(), template, caster); + final EffectPointInstance effectPoint = new EffectPointInstance(IdManager.getInstance().getNextId(), template, caster); effectPoint.getStatus().setCurrentHp(effectPoint.getMaxHp()); effectPoint.getStatus().setCurrentMp(effectPoint.getMaxMp()); World.getInstance().storeObject(effectPoint); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/skills/handlers/SkillSummon.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/skills/handlers/SkillSummon.java index 56dc529a75..30af4bc9c5 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/skills/handlers/SkillSummon.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/skills/handlers/SkillSummon.java @@ -19,7 +19,7 @@ package org.l2jmobius.gameserver.model.skills.handlers; import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.datatables.xml.ExperienceData; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.Skill; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.World; @@ -206,11 +206,11 @@ public class SkillSummon extends Skill } if (summonTemplate.getType().equalsIgnoreCase("SiegeSummon")) { - summon = new SiegeSummonInstance(IdFactory.getNextId(), summonTemplate, activeChar, this); + summon = new SiegeSummonInstance(IdManager.getInstance().getNextId(), summonTemplate, activeChar, this); } else { - summon = new SummonInstance(IdFactory.getNextId(), summonTemplate, activeChar, this); + summon = new SummonInstance(IdManager.getInstance().getNextId(), summonTemplate, activeChar, this); } summon.setName(summonTemplate.getName()); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/spawn/AutoSpawn.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/spawn/AutoSpawn.java index 2e0852dbdd..9a5f3ab527 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/spawn/AutoSpawn.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/spawn/AutoSpawn.java @@ -34,7 +34,7 @@ import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.datatables.sql.NpcTable; import org.l2jmobius.gameserver.datatables.sql.SpawnTable; import org.l2jmobius.gameserver.datatables.xml.MapRegionData; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.actor.instance.NpcInstance; import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; @@ -140,7 +140,7 @@ public class AutoSpawn } } - final int newId = IdFactory.getNextId(); + final int newId = IdManager.getInstance().getNextId(); newSpawn._objectId = newId; synchronized (_registeredSpawns) diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/spawn/GroupSpawn.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/spawn/GroupSpawn.java index e0923087e9..a1c1a06ded 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/spawn/GroupSpawn.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/spawn/GroupSpawn.java @@ -20,7 +20,7 @@ import java.lang.reflect.Constructor; import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.datatables.sql.TerritoryTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.NpcInstance; import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; @@ -53,7 +53,7 @@ public class GroupSpawn extends Spawn final Object[] parameters = { - IdFactory.getNextId(), + IdManager.getInstance().getNextId(), _template }; final Object tmp = _constructor.newInstance(parameters); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/spawn/Spawn.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/spawn/Spawn.java index 561f51e011..14f743a500 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/spawn/Spawn.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/spawn/Spawn.java @@ -24,7 +24,7 @@ import java.util.logging.Logger; import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.datatables.sql.TerritoryTable; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.instance.NpcInstance; import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; @@ -384,7 +384,7 @@ public class Spawn // Get NpcInstance Init parameters and its generate an Identifier final Object[] parameters = { - IdFactory.getNextId(), + IdManager.getInstance().getNextId(), _template }; diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java index 8e5abfb890..1882eeec28 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java @@ -19,7 +19,7 @@ package org.l2jmobius.gameserver.model.zone; import java.awt.geom.Line2D; import org.l2jmobius.gameserver.datatables.xml.ZoneData; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; /** @@ -92,7 +92,7 @@ public abstract class ZoneForm protected static final void dropDebugItem(int id, int x, int y, int z) { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), 57); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 57); item.setCount(id); item.spawnMe(x, y, z + 5); ZoneData.getInstance().addDebugItem(item); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java index 9af167746a..2834d5d4c9 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/CharacterCreate.java @@ -28,7 +28,7 @@ import org.l2jmobius.gameserver.datatables.sql.CharNameTable; import org.l2jmobius.gameserver.datatables.sql.SkillTreeTable; import org.l2jmobius.gameserver.datatables.xml.ExperienceData; import org.l2jmobius.gameserver.datatables.xml.PlayerTemplateData; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.QuestManager; import org.l2jmobius.gameserver.model.ShortCut; import org.l2jmobius.gameserver.model.SkillLearn; @@ -122,7 +122,7 @@ public class CharacterCreate extends GameClientPacket return; } - final int objectId = IdFactory.getNextId(); + final int objectId = IdManager.getInstance().getNextId(); newChar = PlayerInstance.create(objectId, template, getClient().getAccountName(), _name, _hairStyle, _hairColor, _face, _sex != 0); newChar.setCurrentHp(newChar.getMaxHp()); // L2Off like // newChar.setCurrentCp(template.baseCpMax); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestExSetPledgeCrestLarge.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestExSetPledgeCrestLarge.java index 13fce208cf..70d16b2268 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestExSetPledgeCrestLarge.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestExSetPledgeCrestLarge.java @@ -23,7 +23,7 @@ import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.cache.CrestCache; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -98,7 +98,7 @@ public class RequestExSetPledgeCrestLarge extends GameClientPacket } final CrestCache crestCache = CrestCache.getInstance(); - final int newId = IdFactory.getNextId(); + final int newId = IdManager.getInstance().getNextId(); if (!crestCache.savePledgeCrestLarge(newId, _data)) { LOGGER.warning("Error loading large crest of clan:" + clan.getName()); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestSetAllyCrest.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestSetAllyCrest.java index 26e18fa774..7089248770 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestSetAllyCrest.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestSetAllyCrest.java @@ -24,7 +24,7 @@ import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.cache.CrestCache; import org.l2jmobius.gameserver.datatables.sql.ClanTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -78,7 +78,7 @@ public class RequestSetAllyCrest extends GameClientPacket } final CrestCache crestCache = CrestCache.getInstance(); - final int newId = IdFactory.getNextId(); + final int newId = IdManager.getInstance().getNextId(); if (!crestCache.saveAllyCrest(newId, _data)) { LOGGER.warning("Error loading crest of ally:" + leaderclan.getAllyName()); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestSetPledgeCrest.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestSetPledgeCrest.java index bfd0156596..c8b78c953b 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestSetPledgeCrest.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestSetPledgeCrest.java @@ -23,7 +23,7 @@ import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.cache.CrestCache; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -105,7 +105,7 @@ public class RequestSetPledgeCrest extends GameClientPacket } final CrestCache crestCache = CrestCache.getInstance(); - final int newId = IdFactory.getNextId(); + final int newId = IdManager.getInstance().getNextId(); if (clan.hasCrest()) { crestCache.removePledgeCrest(newId); diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/util/MinionList.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/util/MinionList.java index 1f651cc097..ebf2d7d9ee 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/util/MinionList.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/util/MinionList.java @@ -27,7 +27,7 @@ import org.l2jmobius.Config; import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.ai.CtrlIntention; import org.l2jmobius.gameserver.datatables.sql.NpcTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.MinionData; import org.l2jmobius.gameserver.model.actor.instance.MinionInstance; import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance; @@ -198,7 +198,7 @@ public class MinionList *
  • Set the Minion HP, MP and Heading
  • *
  • Set the Minion leader to this RaidBoss
  • *
  • Init the position of the Minion and add it in the world as a visible object

  • - * @param minionid The I2NpcTemplate Identifier of the Minion to spawn + * @param minionid The NpcTemplate Identifier of the Minion to spawn */ public void spawnSingleMinion(int minionid) { @@ -206,7 +206,7 @@ public class MinionList final NpcTemplate minionTemplate = NpcTable.getInstance().getTemplate(minionid); // Create and Init the Minion and generate its Identifier - final MinionInstance monster = new MinionInstance(IdFactory.getNextId(), minionTemplate); + final MinionInstance monster = new MinionInstance(IdManager.getInstance().getNextId(), minionTemplate); // Set the Minion HP, MP and Heading monster.setCurrentHpMp(monster.getMaxHp(), monster.getMaxMp()); diff --git a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/bypasshandlers/Loto.java b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/bypasshandlers/Loto.java index b18cb6e400..8127ebdb94 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/bypasshandlers/Loto.java +++ b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/bypasshandlers/Loto.java @@ -20,7 +20,7 @@ import java.text.DateFormat; import org.l2jmobius.Config; import org.l2jmobius.gameserver.handler.IBypassHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.games.Lottery; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Npc; @@ -225,7 +225,7 @@ public class Loto implements IBypassHandler sm.addItemName(4442); player.sendPacket(sm); - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), 4442); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 4442); item.setCount(1); item.setCustomType1(lotonumber); item.setEnchantLevel(enchant); diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/GameServer.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/GameServer.java index 1910294485..b062cc4275 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/GameServer.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/GameServer.java @@ -90,7 +90,6 @@ import org.l2jmobius.gameserver.datatables.SchemeBufferTable; import org.l2jmobius.gameserver.datatables.SpawnTable; import org.l2jmobius.gameserver.geoengine.GeoEngine; import org.l2jmobius.gameserver.handler.EffectHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AirShipManager; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.BoatManager; @@ -112,6 +111,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.FourSepulchersManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.instancemanager.ItemAuctionManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; @@ -201,9 +201,9 @@ public class GameServer printSection("ThreadPool"); ThreadPool.init(); - printSection("IdFactory"); - IdFactory.init(); - if (!IdFactory.hasInitialized()) + printSection("IdManager"); + IdManager.getInstance(); + if (!IdManager.hasInitialized()) { LOGGER.severe(getClass().getSimpleName() + ": Could not read object IDs from database. Please check your configuration."); throw new Exception("Could not initialize the ID factory!"); @@ -423,7 +423,7 @@ public class GameServer Runtime.getRuntime().addShutdownHook(Shutdown.getInstance()); - LOGGER.info("IdFactory: Free ObjectID's remaining: " + IdFactory.size()); + LOGGER.info("IdManager: Free ObjectID's remaining: " + IdManager.size()); TvTManager.getInstance(); diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java index 6bb1fac118..311ba66fc8 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java @@ -32,11 +32,11 @@ import org.l2jmobius.Config; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.communitybbs.Manager.ForumsBBSManager; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.CHSiegeManager; import org.l2jmobius.gameserver.instancemanager.ClanHallAuctionManager; import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.SiegeManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -197,7 +197,7 @@ public class ClanTable return null; } - final Clan clan = new Clan(IdFactory.getNextId(), clanName); + final Clan clan = new Clan(IdManager.getInstance().getNextId(), clanName); final ClanMember leader = new ClanMember(clan, player); clan.setLeader(leader); leader.setPlayerInstance(player); @@ -272,7 +272,7 @@ public class ClanTable } _clans.remove(clanId); - IdFactory.releaseId(clanId); + IdManager.getInstance().releaseId(clanId); try (Connection con = DatabaseFactory.getConnection()) { diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/datatables/ItemTable.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/datatables/ItemTable.java index 833c82a740..69dd397be2 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/datatables/ItemTable.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/datatables/ItemTable.java @@ -33,7 +33,7 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.data.xml.impl.EnchantItemHPBonusData; import org.l2jmobius.gameserver.engines.DocumentEngine; import org.l2jmobius.gameserver.enums.ItemLocation; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Attackable; @@ -204,7 +204,7 @@ public class ItemTable public ItemInstance createItem(String process, int itemId, long count, Creature actor, Object reference) { // Create and Init the ItemInstance corresponding to the Item Identifier - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); if (process.equalsIgnoreCase("loot") && !Config.AUTO_LOOT_ITEM_IDS.contains(itemId)) { ScheduledFuture itemLootShedule; @@ -319,7 +319,7 @@ public class ItemTable item.setLastChange(ItemInstance.REMOVED); World.getInstance().removeObject(item); - IdFactory.releaseId(item.getObjectId()); + IdManager.getInstance().releaseId(item.getObjectId()); if (Config.LOG_ITEMS) { diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/idfactory/IdFactory.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/instancemanager/IdManager.java similarity index 80% rename from L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/idfactory/IdFactory.java rename to L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/instancemanager/IdManager.java index 8c38e9aa6b..d292051ac9 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/idfactory/IdFactory.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/instancemanager/IdManager.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.l2jmobius.gameserver.idfactory; +package org.l2jmobius.gameserver.instancemanager; import java.sql.Connection; import java.sql.PreparedStatement; @@ -33,40 +33,12 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.util.PrimeFinder; /** - * @author Mobius (reworked from L2J version) + * @author Mobius (reworked from L2J IdFactory) */ -public abstract class IdFactory +public class IdManager { - private static final Logger LOGGER = Logger.getLogger(IdFactory.class.getName()); + private static final Logger LOGGER = Logger.getLogger(IdManager.class.getName()); - protected static final String[] ID_CHECKS = - { - "SELECT owner_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT object_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT charId FROM character_quests WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_contacts WHERE charId >= ? AND charId < ?", - "SELECT contactId FROM character_contacts WHERE contactId >= ? AND contactId < ?", - "SELECT charId FROM character_friends WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_friends WHERE friendId >= ? AND friendId < ?", - "SELECT charId FROM character_hennas WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipebook WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipeshoplist WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_shortcuts WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_macroses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills_save WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_subclasses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_ui_actions WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_ui_categories WHERE charId >= ? AND charId < ?", - "SELECT charId FROM characters WHERE charId >= ? AND charId < ?", - "SELECT clanid FROM characters WHERE clanid >= ? AND clanid < ?", - "SELECT clan_id FROM clan_data WHERE clan_id >= ? AND clan_id < ?", - "SELECT clan_id FROM siege_clans WHERE clan_id >= ? AND clan_id < ?", - "SELECT ally_id FROM clan_data WHERE ally_id >= ? AND ally_id < ?", - "SELECT leader_id FROM clan_data WHERE leader_id >= ? AND leader_id < ?", - "SELECT item_obj_id FROM pets WHERE item_obj_id >= ? AND item_obj_id < ?", - "SELECT object_id FROM itemsonground WHERE object_id >= ? AND object_id < ?" - }; //@formatter:off private static final String[][] ID_EXTRACTS = { @@ -77,21 +49,23 @@ public abstract class IdFactory {"messages","messageId"} }; //@formatter:on + private static final String[] TIMESTAMPS_CLEAN = { "DELETE FROM character_instance_time WHERE time <= ?", "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" }; - public static final int FIRST_OID = 0x10000000; - public static final int LAST_OID = 0x7FFFFFFF; - public static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; + + private static final int FIRST_OID = 0x10000000; + private static final int LAST_OID = 0x7FFFFFFF; + private static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; private static BitSet _freeIds; private static AtomicInteger _freeIdCount; private static AtomicInteger _nextFreeId; private static boolean _initialized; - public static void init() + public IdManager() { // Update characters online status. try (Connection con = DatabaseFactory.getConnection(); @@ -102,7 +76,7 @@ public abstract class IdFactory } catch (Exception e) { - LOGGER.warning("IdFactory: Could not update characters online status: " + e); + LOGGER.warning("IdManager: Could not update characters online status: " + e); } // Cleanup database. @@ -202,11 +176,11 @@ public abstract class IdFactory statement.executeUpdate("UPDATE clanhall SET ownerId=0, paidUntil=0, paid=0 WHERE clanhall.ownerId NOT IN (SELECT clan_id FROM clan_data);"); statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); - LOGGER.info("IdFactory: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); + LOGGER.info("IdManager: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); } catch (Exception e) { - LOGGER.warning("IdFactory: Could not clean up database: " + e); + LOGGER.warning("IdManager: Could not clean up database: " + e); } } @@ -222,11 +196,11 @@ public abstract class IdFactory cleanCount += statement.executeUpdate(); } } - LOGGER.info("IdFactory: Cleaned " + cleanCount + " expired timestamps from database."); + LOGGER.info("IdManager: Cleaned " + cleanCount + " expired timestamps from database."); } catch (Exception e) { - LOGGER.warning("IdFactory: Could not clean expired timestamps from database. " + e); + LOGGER.warning("IdManager: Could not clean expired timestamps from database. " + e); } // Initialize. @@ -263,7 +237,7 @@ public abstract class IdFactory final int objectId = usedObjectId - FIRST_OID; if (objectId < 0) { - LOGGER.warning("IdFactory: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); + LOGGER.warning("IdManager: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); continue; } _freeIds.set(usedObjectId - FIRST_OID); @@ -276,7 +250,7 @@ public abstract class IdFactory catch (Exception e) { _initialized = false; - LOGGER.severe("IdFactory: Could not be initialized properly: " + e.getMessage()); + LOGGER.severe("IdManager: Could not be initialized properly: " + e.getMessage()); } // Schedule increase capacity task. @@ -291,10 +265,10 @@ public abstract class IdFactory } }, 30000, 30000); - LOGGER.info("IdFactory: " + _freeIds.size() + " id's available."); + LOGGER.info("IdManager: " + _freeIds.size() + " id's available."); } - public synchronized static void releaseId(int objectId) + public void releaseId(int objectId) { synchronized (_nextFreeId) { @@ -305,12 +279,12 @@ public abstract class IdFactory } else { - LOGGER.warning("IdFactory: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); + LOGGER.warning("IdManager: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); } } } - public synchronized static int getNextId() + public int getNextId() { synchronized (_nextFreeId) { @@ -323,7 +297,7 @@ public abstract class IdFactory { if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) { - throw new NullPointerException("IdFactory: Ran out of valid ids."); + throw new NullPointerException("IdManager: Ran out of valid ids."); } increaseBitSetCapacity(); } @@ -333,14 +307,14 @@ public abstract class IdFactory } } - private static void increaseBitSetCapacity() + private void increaseBitSetCapacity() { final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); newBitSet.or(_freeIds); _freeIds = newBitSet; } - private static int usedIdCount() + private int usedIdCount() { return _freeIdCount.get() - FIRST_OID; } @@ -354,4 +328,14 @@ public abstract class IdFactory { return _initialized; } + + public static IdManager getInstance() + { + return SingletonHolder.INSTANCE; + } + + private static class SingletonHolder + { + protected static final IdManager INSTANCE = new IdManager(); + } } diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/instancemanager/MailManager.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/instancemanager/MailManager.java index c85c04fe3a..689fe25079 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/instancemanager/MailManager.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/instancemanager/MailManager.java @@ -30,7 +30,6 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.entity.Message; @@ -241,7 +240,7 @@ public class MailManager } _messages.remove(msgId); - IdFactory.releaseId(msgId); + IdManager.getInstance().releaseId(msgId); } /** diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/instancemanager/MercTicketManager.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/instancemanager/MercTicketManager.java index 4811327010..457d223b57 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/instancemanager/MercTicketManager.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/instancemanager/MercTicketManager.java @@ -27,7 +27,6 @@ import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.data.xml.impl.NpcData; import org.l2jmobius.gameserver.enums.ItemLocation; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.DefenderInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; @@ -188,7 +187,7 @@ public class MercTicketManager { itemId = ITEM_IDS[i]; // create the ticket in the gameworld - final ItemInstance dropticket = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance dropticket = new ItemInstance(IdManager.getInstance().getNextId(), itemId); dropticket.setItemLocation(ItemLocation.VOID); dropticket.dropMe(null, x, y, z); dropticket.setDropTime(0); // avoids it from being removed by the auto item destroyer @@ -322,7 +321,7 @@ public class MercTicketManager castle.getSiege().getSiegeGuardManager().hireMerc(x, y, z, heading, NPC_IDS[i]); // create the ticket in the gameworld - final ItemInstance dropticket = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance dropticket = new ItemInstance(IdManager.getInstance().getNextId(), itemId); dropticket.setItemLocation(ItemLocation.VOID); dropticket.dropMe(null, x, y, z); dropticket.setDropTime(0); // avoids it from beeing removed by the auto item destroyer diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/AutoSpawnHandler.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/AutoSpawnHandler.java index 3804282ce2..361fd3267a 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/AutoSpawnHandler.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/AutoSpawnHandler.java @@ -38,7 +38,7 @@ import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.datatables.SpawnTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MapRegionManager; import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.interfaces.IIdentifiable; @@ -177,7 +177,7 @@ public class AutoSpawnHandler } } - final int newId = IdFactory.getNextId(); + final int newId = IdManager.getInstance().getNextId(); newSpawn._objectId = newId; _registeredSpawns.put(newId, newSpawn); diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/Petition.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/Petition.java index 0032035354..86bc7e3bba 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/Petition.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/Petition.java @@ -21,7 +21,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.PetitionState; import org.l2jmobius.gameserver.enums.PetitionType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.PetitionManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -47,7 +47,7 @@ public class Petition public Petition(PlayerInstance petitioner, String petitionText, int petitionType) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _type = PetitionType.values()[petitionType - 1]; _content = petitionText; _petitioner = petitioner; diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/WorldObject.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/WorldObject.java index 26bf09c73d..e25b28ada6 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/WorldObject.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/WorldObject.java @@ -25,7 +25,7 @@ import org.l2jmobius.gameserver.handler.ActionHandler; import org.l2jmobius.gameserver.handler.ActionShiftHandler; import org.l2jmobius.gameserver.handler.IActionHandler; import org.l2jmobius.gameserver.handler.IActionShiftHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Npc; @@ -156,8 +156,8 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif public void refreshId() { World.getInstance().removeObject(this); - IdFactory.releaseId(getObjectId()); - _objectId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(getObjectId()); + _objectId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/Creature.java index d558e70c17..08842fc427 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -56,7 +56,7 @@ import org.l2jmobius.gameserver.enums.ShotType; import org.l2jmobius.gameserver.enums.Team; import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.instancemanager.MapRegionManager; import org.l2jmobius.gameserver.instancemanager.QuestManager; @@ -288,7 +288,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public Creature(CreatureTemplate template) { - this(IdFactory.getNextId(), template); + this(IdManager.getInstance().getNextId(), template); } /** diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java index 74015076d4..961f31dc9b 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java @@ -20,7 +20,7 @@ import java.util.concurrent.Future; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.gameserver.enums.InstanceType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.stat.ControllableAirShipStat; import org.l2jmobius.gameserver.model.actor.templates.CreatureTemplate; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -52,7 +52,7 @@ public class ControllableAirShipInstance extends AirShipInstance super(template); setInstanceType(InstanceType.ControllableAirShipInstance); _ownerId = ownerId; - _helmId = IdFactory.getNextId(); // not forget to release ! + _helmId = IdManager.getInstance().getNextId(); // not forget to release ! } @Override @@ -286,8 +286,8 @@ public class ControllableAirShipInstance extends AirShipInstance public void refreshId() { super.refreshId(); - IdFactory.releaseId(_helmId); - _helmId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(_helmId); + _helmId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java index 48c52c920f..c8412e68be 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.actor.instance; import org.l2jmobius.gameserver.data.xml.impl.FenceData; import org.l2jmobius.gameserver.enums.FenceState; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; @@ -44,7 +44,7 @@ public class FenceInstance extends WorldObject public FenceInstance(int x, int y, String name, int width, int length, int height, FenceState state) { - super(IdFactory.getNextId()); + super(IdManager.getInstance().getNextId()); _xMin = x - (width / 2); _xMax = x + (width / 2); @@ -59,7 +59,7 @@ public class FenceInstance extends WorldObject _heightFences = new int[height - 1]; for (int i = 0; i < _heightFences.length; i++) { - _heightFences[i] = IdFactory.getNextId(); + _heightFences[i] = IdManager.getInstance().getNextId(); } } } diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index f4e9a7b924..9fb9b55320 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -99,7 +99,6 @@ import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.geoengine.GeoEngine; import org.l2jmobius.gameserver.handler.IItemHandler; import org.l2jmobius.gameserver.handler.ItemHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CoupleManager; @@ -110,6 +109,7 @@ import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager; import org.l2jmobius.gameserver.instancemanager.HandysBlockCheckerManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.PunishmentManager; @@ -847,7 +847,7 @@ public class PlayerInstance extends Playable */ private PlayerInstance(PlayerTemplate template, String accountName, PlayerAppearance app) { - this(IdFactory.getNextId(), template, accountName, app); + this(IdManager.getInstance().getNextId(), template, accountName, app); } public void setPvpFlagLasts(long time) diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java index d8b6f1339f..7640b81550 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java @@ -21,7 +21,7 @@ import java.util.Locale; import org.l2jmobius.Config; import org.l2jmobius.commons.util.StringUtil; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.HistoryInfo; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.RaceState; @@ -160,7 +160,7 @@ public class RaceManagerInstance extends Npc player.setRace(0, 0); player.setRace(1, 0); - ItemInstance item = new ItemInstance(IdFactory.getNextId(), 4443); + ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 4443); item.setCount(1); item.setEnchantLevel(MonsterRace.getInstance().getRaceNumber()); item.setCustomType1(ticket); diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java index 6762897720..929d68a27f 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.announce; import java.util.Date; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.script.DateRange; /** @@ -32,7 +32,7 @@ public class EventAnnouncement implements IAnnouncement public EventAnnouncement(DateRange range, String content) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _range = range; _content = content; } @@ -88,7 +88,7 @@ public class EventAnnouncement implements IAnnouncement @Override public boolean deleteMe() { - IdFactory.releaseId(_id); + IdManager.getInstance().releaseId(_id); return true; } diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/entity/Auction.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/entity/Auction.java index 514f121ef1..8f0735c43a 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/entity/Auction.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/entity/Auction.java @@ -32,9 +32,9 @@ import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.data.sql.impl.ClanTable; import org.l2jmobius.gameserver.enums.AuctionItemType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.ClanHallAuctionManager; import org.l2jmobius.gameserver.instancemanager.ClanHallManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -352,7 +352,7 @@ public class Auction { try (PreparedStatement ps = con.prepareStatement("INSERT INTO auction_bid (id, auctionId, bidderId, bidderName, maxBid, clan_name, time_bid) VALUES (?, ?, ?, ?, ?, ?, ?)")) { - ps.setInt(1, IdFactory.getNextId()); + ps.setInt(1, IdManager.getInstance().getNextId()); ps.setInt(2, _id); ps.setInt(3, bidder.getClanId()); ps.setString(4, bidder.getName()); diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/entity/Couple.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/entity/Couple.java index 6897b8d681..54104ff7ab 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/entity/Couple.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/entity/Couple.java @@ -24,7 +24,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; /** @@ -85,7 +85,7 @@ public class Couple try (Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO mods_wedding (id, player1Id, player2Id, married, affianceDate, weddingDate) VALUES (?, ?, ?, ?, ?, ?)")) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); ps.setInt(1, _id); ps.setInt(2, _player1Id); ps.setInt(3, _player2Id); diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/entity/Message.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/entity/Message.java index 06ed54da7b..d215c2a10b 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/entity/Message.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/entity/Message.java @@ -25,7 +25,7 @@ import java.util.concurrent.ScheduledFuture; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.data.sql.impl.CharNameTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MailManager; import org.l2jmobius.gameserver.model.itemcontainer.Mail; @@ -95,7 +95,7 @@ public class Message */ public Message(int senderId, int receiverId, boolean isCod, String subject, String text, long reqAdena) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -113,7 +113,7 @@ public class Message */ public Message(int receiverId, String subject, String content, SendBySystem sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = subject; @@ -133,7 +133,7 @@ public class Message */ public Message(Message msg) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = msg.getSenderId(); _receiverId = msg.getSenderId(); _subject = ""; diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 5d9290d1f7..1dc96daa0a 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -40,7 +40,7 @@ import org.l2jmobius.gameserver.enums.InstanceType; import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ShotType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.MercTicketManager; import org.l2jmobius.gameserver.model.Augmentation; @@ -221,7 +221,7 @@ public class ItemInstance extends WorldObject */ public ItemInstance(int itemId) { - this(IdFactory.getNextId(), itemId); + this(IdManager.getInstance().getNextId(), itemId); } /** diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java index ee2437143a..7fa54aa75e 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java @@ -16,7 +16,7 @@ */ package org.l2jmobius.gameserver.model.zone; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -50,7 +50,7 @@ public abstract class ZoneForm protected final void dropDebugItem(int itemId, int num, int x, int y, int z) { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); item.setCount(num); item.spawnMe(x, y, z + 5); ZoneManager.getInstance().getDebugItems().add(item); diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/bypasshandlers/Loto.java b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/bypasshandlers/Loto.java index b18cb6e400..8127ebdb94 100644 --- a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/bypasshandlers/Loto.java +++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/bypasshandlers/Loto.java @@ -20,7 +20,7 @@ import java.text.DateFormat; import org.l2jmobius.Config; import org.l2jmobius.gameserver.handler.IBypassHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.games.Lottery; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Npc; @@ -225,7 +225,7 @@ public class Loto implements IBypassHandler sm.addItemName(4442); player.sendPacket(sm); - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), 4442); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 4442); item.setCount(1); item.setCustomType1(lotonumber); item.setEnchantLevel(enchant); diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/GameServer.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/GameServer.java index 681d6bf01a..fe14f71a20 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/GameServer.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/GameServer.java @@ -91,7 +91,6 @@ import org.l2jmobius.gameserver.datatables.SchemeBufferTable; import org.l2jmobius.gameserver.datatables.SpawnTable; import org.l2jmobius.gameserver.geoengine.GeoEngine; import org.l2jmobius.gameserver.handler.EffectHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AirShipManager; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.BoatManager; @@ -113,6 +112,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.FourSepulchersManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.instancemanager.ItemAuctionManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; @@ -202,9 +202,9 @@ public class GameServer printSection("ThreadPool"); ThreadPool.init(); - printSection("IdFactory"); - IdFactory.init(); - if (!IdFactory.hasInitialized()) + printSection("IdManager"); + IdManager.getInstance(); + if (!IdManager.hasInitialized()) { LOGGER.severe(getClass().getSimpleName() + ": Could not read object IDs from database. Please check your configuration."); throw new Exception("Could not initialize the ID factory!"); @@ -425,7 +425,7 @@ public class GameServer Runtime.getRuntime().addShutdownHook(Shutdown.getInstance()); - LOGGER.info("IdFactory: Free ObjectID's remaining: " + IdFactory.size()); + LOGGER.info("IdManager: Free ObjectID's remaining: " + IdManager.size()); TvTManager.getInstance(); diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java index 6bb1fac118..311ba66fc8 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java @@ -32,11 +32,11 @@ import org.l2jmobius.Config; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.communitybbs.Manager.ForumsBBSManager; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.CHSiegeManager; import org.l2jmobius.gameserver.instancemanager.ClanHallAuctionManager; import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.SiegeManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -197,7 +197,7 @@ public class ClanTable return null; } - final Clan clan = new Clan(IdFactory.getNextId(), clanName); + final Clan clan = new Clan(IdManager.getInstance().getNextId(), clanName); final ClanMember leader = new ClanMember(clan, player); clan.setLeader(leader); leader.setPlayerInstance(player); @@ -272,7 +272,7 @@ public class ClanTable } _clans.remove(clanId); - IdFactory.releaseId(clanId); + IdManager.getInstance().releaseId(clanId); try (Connection con = DatabaseFactory.getConnection()) { diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/datatables/ItemTable.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/datatables/ItemTable.java index 833c82a740..69dd397be2 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/datatables/ItemTable.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/datatables/ItemTable.java @@ -33,7 +33,7 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.data.xml.impl.EnchantItemHPBonusData; import org.l2jmobius.gameserver.engines.DocumentEngine; import org.l2jmobius.gameserver.enums.ItemLocation; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Attackable; @@ -204,7 +204,7 @@ public class ItemTable public ItemInstance createItem(String process, int itemId, long count, Creature actor, Object reference) { // Create and Init the ItemInstance corresponding to the Item Identifier - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); if (process.equalsIgnoreCase("loot") && !Config.AUTO_LOOT_ITEM_IDS.contains(itemId)) { ScheduledFuture itemLootShedule; @@ -319,7 +319,7 @@ public class ItemTable item.setLastChange(ItemInstance.REMOVED); World.getInstance().removeObject(item); - IdFactory.releaseId(item.getObjectId()); + IdManager.getInstance().releaseId(item.getObjectId()); if (Config.LOG_ITEMS) { diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/idfactory/IdFactory.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/instancemanager/IdManager.java similarity index 80% rename from L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/idfactory/IdFactory.java rename to L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/instancemanager/IdManager.java index 8f89f55c25..d2946d0140 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/idfactory/IdFactory.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/instancemanager/IdManager.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.l2jmobius.gameserver.idfactory; +package org.l2jmobius.gameserver.instancemanager; import java.sql.Connection; import java.sql.PreparedStatement; @@ -33,40 +33,12 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.util.PrimeFinder; /** - * @author Mobius (reworked from L2J version) + * @author Mobius (reworked from L2J IdFactory) */ -public abstract class IdFactory +public class IdManager { - private static final Logger LOGGER = Logger.getLogger(IdFactory.class.getName()); + private static final Logger LOGGER = Logger.getLogger(IdManager.class.getName()); - protected static final String[] ID_CHECKS = - { - "SELECT owner_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT object_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT charId FROM character_quests WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_contacts WHERE charId >= ? AND charId < ?", - "SELECT contactId FROM character_contacts WHERE contactId >= ? AND contactId < ?", - "SELECT charId FROM character_friends WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_friends WHERE friendId >= ? AND friendId < ?", - "SELECT charId FROM character_hennas WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipebook WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipeshoplist WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_shortcuts WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_macroses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills_save WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_subclasses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_ui_actions WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_ui_categories WHERE charId >= ? AND charId < ?", - "SELECT charId FROM characters WHERE charId >= ? AND charId < ?", - "SELECT clanid FROM characters WHERE clanid >= ? AND clanid < ?", - "SELECT clan_id FROM clan_data WHERE clan_id >= ? AND clan_id < ?", - "SELECT clan_id FROM siege_clans WHERE clan_id >= ? AND clan_id < ?", - "SELECT ally_id FROM clan_data WHERE ally_id >= ? AND ally_id < ?", - "SELECT leader_id FROM clan_data WHERE leader_id >= ? AND leader_id < ?", - "SELECT item_obj_id FROM pets WHERE item_obj_id >= ? AND item_obj_id < ?", - "SELECT object_id FROM itemsonground WHERE object_id >= ? AND object_id < ?" - }; //@formatter:off private static final String[][] ID_EXTRACTS = { @@ -77,21 +49,23 @@ public abstract class IdFactory {"messages","messageId"} }; //@formatter:on + private static final String[] TIMESTAMPS_CLEAN = { "DELETE FROM character_instance_time WHERE time <= ?", "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" }; - public static final int FIRST_OID = 0x10000000; - public static final int LAST_OID = 0x7FFFFFFF; - public static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; + + private static final int FIRST_OID = 0x10000000; + private static final int LAST_OID = 0x7FFFFFFF; + private static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; private static BitSet _freeIds; private static AtomicInteger _freeIdCount; private static AtomicInteger _nextFreeId; private static boolean _initialized; - public static void init() + public IdManager() { // Update characters online status. try (Connection con = DatabaseFactory.getConnection(); @@ -102,7 +76,7 @@ public abstract class IdFactory } catch (Exception e) { - LOGGER.warning("IdFactory: Could not update characters online status: " + e); + LOGGER.warning("IdManager: Could not update characters online status: " + e); } // Cleanup database. @@ -201,11 +175,11 @@ public abstract class IdFactory statement.executeUpdate("UPDATE clanhall SET ownerId=0, paidUntil=0, paid=0 WHERE clanhall.ownerId NOT IN (SELECT clan_id FROM clan_data);"); statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); - LOGGER.info("IdFactory: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); + LOGGER.info("IdManager: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); } catch (Exception e) { - LOGGER.warning("IdFactory: Could not clean up database: " + e); + LOGGER.warning("IdManager: Could not clean up database: " + e); } } @@ -221,11 +195,11 @@ public abstract class IdFactory cleanCount += statement.executeUpdate(); } } - LOGGER.info("IdFactory: Cleaned " + cleanCount + " expired timestamps from database."); + LOGGER.info("IdManager: Cleaned " + cleanCount + " expired timestamps from database."); } catch (Exception e) { - LOGGER.warning("IdFactory: Could not clean expired timestamps from database. " + e); + LOGGER.warning("IdManager: Could not clean expired timestamps from database. " + e); } // Initialize. @@ -262,7 +236,7 @@ public abstract class IdFactory final int objectId = usedObjectId - FIRST_OID; if (objectId < 0) { - LOGGER.warning("IdFactory: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); + LOGGER.warning("IdManager: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); continue; } _freeIds.set(usedObjectId - FIRST_OID); @@ -275,7 +249,7 @@ public abstract class IdFactory catch (Exception e) { _initialized = false; - LOGGER.severe("IdFactory: Could not be initialized properly: " + e.getMessage()); + LOGGER.severe("IdManager: Could not be initialized properly: " + e.getMessage()); } // Schedule increase capacity task. @@ -290,10 +264,10 @@ public abstract class IdFactory } }, 30000, 30000); - LOGGER.info("IdFactory: " + _freeIds.size() + " id's available."); + LOGGER.info("IdManager: " + _freeIds.size() + " id's available."); } - public synchronized static void releaseId(int objectId) + public void releaseId(int objectId) { synchronized (_nextFreeId) { @@ -304,12 +278,12 @@ public abstract class IdFactory } else { - LOGGER.warning("IdFactory: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); + LOGGER.warning("IdManager: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); } } } - public synchronized static int getNextId() + public int getNextId() { synchronized (_nextFreeId) { @@ -322,7 +296,7 @@ public abstract class IdFactory { if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) { - throw new NullPointerException("IdFactory: Ran out of valid ids."); + throw new NullPointerException("IdManager: Ran out of valid ids."); } increaseBitSetCapacity(); } @@ -332,14 +306,14 @@ public abstract class IdFactory } } - private static void increaseBitSetCapacity() + private void increaseBitSetCapacity() { final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); newBitSet.or(_freeIds); _freeIds = newBitSet; } - private static int usedIdCount() + private int usedIdCount() { return _freeIdCount.get() - FIRST_OID; } @@ -353,4 +327,14 @@ public abstract class IdFactory { return _initialized; } + + public static IdManager getInstance() + { + return SingletonHolder.INSTANCE; + } + + private static class SingletonHolder + { + protected static final IdManager INSTANCE = new IdManager(); + } } diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/instancemanager/MailManager.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/instancemanager/MailManager.java index c85c04fe3a..689fe25079 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/instancemanager/MailManager.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/instancemanager/MailManager.java @@ -30,7 +30,6 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.entity.Message; @@ -241,7 +240,7 @@ public class MailManager } _messages.remove(msgId); - IdFactory.releaseId(msgId); + IdManager.getInstance().releaseId(msgId); } /** diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/instancemanager/MercTicketManager.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/instancemanager/MercTicketManager.java index 4811327010..457d223b57 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/instancemanager/MercTicketManager.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/instancemanager/MercTicketManager.java @@ -27,7 +27,6 @@ import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.data.xml.impl.NpcData; import org.l2jmobius.gameserver.enums.ItemLocation; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.DefenderInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; @@ -188,7 +187,7 @@ public class MercTicketManager { itemId = ITEM_IDS[i]; // create the ticket in the gameworld - final ItemInstance dropticket = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance dropticket = new ItemInstance(IdManager.getInstance().getNextId(), itemId); dropticket.setItemLocation(ItemLocation.VOID); dropticket.dropMe(null, x, y, z); dropticket.setDropTime(0); // avoids it from being removed by the auto item destroyer @@ -322,7 +321,7 @@ public class MercTicketManager castle.getSiege().getSiegeGuardManager().hireMerc(x, y, z, heading, NPC_IDS[i]); // create the ticket in the gameworld - final ItemInstance dropticket = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance dropticket = new ItemInstance(IdManager.getInstance().getNextId(), itemId); dropticket.setItemLocation(ItemLocation.VOID); dropticket.dropMe(null, x, y, z); dropticket.setDropTime(0); // avoids it from beeing removed by the auto item destroyer diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/AutoSpawnHandler.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/AutoSpawnHandler.java index 3804282ce2..361fd3267a 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/AutoSpawnHandler.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/AutoSpawnHandler.java @@ -38,7 +38,7 @@ import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.datatables.SpawnTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MapRegionManager; import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.interfaces.IIdentifiable; @@ -177,7 +177,7 @@ public class AutoSpawnHandler } } - final int newId = IdFactory.getNextId(); + final int newId = IdManager.getInstance().getNextId(); newSpawn._objectId = newId; _registeredSpawns.put(newId, newSpawn); diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/Petition.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/Petition.java index 0032035354..86bc7e3bba 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/Petition.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/Petition.java @@ -21,7 +21,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.PetitionState; import org.l2jmobius.gameserver.enums.PetitionType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.PetitionManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -47,7 +47,7 @@ public class Petition public Petition(PlayerInstance petitioner, String petitionText, int petitionType) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _type = PetitionType.values()[petitionType - 1]; _content = petitionText; _petitioner = petitioner; diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/WorldObject.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/WorldObject.java index 26bf09c73d..e25b28ada6 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/WorldObject.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/WorldObject.java @@ -25,7 +25,7 @@ import org.l2jmobius.gameserver.handler.ActionHandler; import org.l2jmobius.gameserver.handler.ActionShiftHandler; import org.l2jmobius.gameserver.handler.IActionHandler; import org.l2jmobius.gameserver.handler.IActionShiftHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Npc; @@ -156,8 +156,8 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif public void refreshId() { World.getInstance().removeObject(this); - IdFactory.releaseId(getObjectId()); - _objectId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(getObjectId()); + _objectId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/Creature.java index 89fc701b4c..c4581f96d4 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -56,7 +56,7 @@ import org.l2jmobius.gameserver.enums.ShotType; import org.l2jmobius.gameserver.enums.Team; import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.instancemanager.MapRegionManager; import org.l2jmobius.gameserver.instancemanager.QuestManager; @@ -289,7 +289,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public Creature(CreatureTemplate template) { - this(IdFactory.getNextId(), template); + this(IdManager.getInstance().getNextId(), template); } /** diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java index 74015076d4..961f31dc9b 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java @@ -20,7 +20,7 @@ import java.util.concurrent.Future; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.gameserver.enums.InstanceType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.stat.ControllableAirShipStat; import org.l2jmobius.gameserver.model.actor.templates.CreatureTemplate; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -52,7 +52,7 @@ public class ControllableAirShipInstance extends AirShipInstance super(template); setInstanceType(InstanceType.ControllableAirShipInstance); _ownerId = ownerId; - _helmId = IdFactory.getNextId(); // not forget to release ! + _helmId = IdManager.getInstance().getNextId(); // not forget to release ! } @Override @@ -286,8 +286,8 @@ public class ControllableAirShipInstance extends AirShipInstance public void refreshId() { super.refreshId(); - IdFactory.releaseId(_helmId); - _helmId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(_helmId); + _helmId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java index 48c52c920f..c8412e68be 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.actor.instance; import org.l2jmobius.gameserver.data.xml.impl.FenceData; import org.l2jmobius.gameserver.enums.FenceState; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; @@ -44,7 +44,7 @@ public class FenceInstance extends WorldObject public FenceInstance(int x, int y, String name, int width, int length, int height, FenceState state) { - super(IdFactory.getNextId()); + super(IdManager.getInstance().getNextId()); _xMin = x - (width / 2); _xMax = x + (width / 2); @@ -59,7 +59,7 @@ public class FenceInstance extends WorldObject _heightFences = new int[height - 1]; for (int i = 0; i < _heightFences.length; i++) { - _heightFences[i] = IdFactory.getNextId(); + _heightFences[i] = IdManager.getInstance().getNextId(); } } } diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 3bc11b587e..5bb15d0140 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -99,7 +99,6 @@ import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.geoengine.GeoEngine; import org.l2jmobius.gameserver.handler.IItemHandler; import org.l2jmobius.gameserver.handler.ItemHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CoupleManager; @@ -110,6 +109,7 @@ import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager; import org.l2jmobius.gameserver.instancemanager.HandysBlockCheckerManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.PunishmentManager; @@ -866,7 +866,7 @@ public class PlayerInstance extends Playable */ private PlayerInstance(PlayerTemplate template, String accountName, PlayerAppearance app) { - this(IdFactory.getNextId(), template, accountName, app); + this(IdManager.getInstance().getNextId(), template, accountName, app); } public void setPvpFlagLasts(long time) diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java index d8b6f1339f..7640b81550 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java @@ -21,7 +21,7 @@ import java.util.Locale; import org.l2jmobius.Config; import org.l2jmobius.commons.util.StringUtil; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.HistoryInfo; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.RaceState; @@ -160,7 +160,7 @@ public class RaceManagerInstance extends Npc player.setRace(0, 0); player.setRace(1, 0); - ItemInstance item = new ItemInstance(IdFactory.getNextId(), 4443); + ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 4443); item.setCount(1); item.setEnchantLevel(MonsterRace.getInstance().getRaceNumber()); item.setCustomType1(ticket); diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java index 6762897720..929d68a27f 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.announce; import java.util.Date; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.script.DateRange; /** @@ -32,7 +32,7 @@ public class EventAnnouncement implements IAnnouncement public EventAnnouncement(DateRange range, String content) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _range = range; _content = content; } @@ -88,7 +88,7 @@ public class EventAnnouncement implements IAnnouncement @Override public boolean deleteMe() { - IdFactory.releaseId(_id); + IdManager.getInstance().releaseId(_id); return true; } diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/entity/Auction.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/entity/Auction.java index 514f121ef1..8f0735c43a 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/entity/Auction.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/entity/Auction.java @@ -32,9 +32,9 @@ import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.data.sql.impl.ClanTable; import org.l2jmobius.gameserver.enums.AuctionItemType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.ClanHallAuctionManager; import org.l2jmobius.gameserver.instancemanager.ClanHallManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -352,7 +352,7 @@ public class Auction { try (PreparedStatement ps = con.prepareStatement("INSERT INTO auction_bid (id, auctionId, bidderId, bidderName, maxBid, clan_name, time_bid) VALUES (?, ?, ?, ?, ?, ?, ?)")) { - ps.setInt(1, IdFactory.getNextId()); + ps.setInt(1, IdManager.getInstance().getNextId()); ps.setInt(2, _id); ps.setInt(3, bidder.getClanId()); ps.setString(4, bidder.getName()); diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/entity/Couple.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/entity/Couple.java index 6897b8d681..54104ff7ab 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/entity/Couple.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/entity/Couple.java @@ -24,7 +24,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; /** @@ -85,7 +85,7 @@ public class Couple try (Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO mods_wedding (id, player1Id, player2Id, married, affianceDate, weddingDate) VALUES (?, ?, ?, ?, ?, ?)")) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); ps.setInt(1, _id); ps.setInt(2, _player1Id); ps.setInt(3, _player2Id); diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/entity/Message.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/entity/Message.java index 06ed54da7b..d215c2a10b 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/entity/Message.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/entity/Message.java @@ -25,7 +25,7 @@ import java.util.concurrent.ScheduledFuture; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.util.Rnd; import org.l2jmobius.gameserver.data.sql.impl.CharNameTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MailManager; import org.l2jmobius.gameserver.model.itemcontainer.Mail; @@ -95,7 +95,7 @@ public class Message */ public Message(int senderId, int receiverId, boolean isCod, String subject, String text, long reqAdena) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -113,7 +113,7 @@ public class Message */ public Message(int receiverId, String subject, String content, SendBySystem sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = subject; @@ -133,7 +133,7 @@ public class Message */ public Message(Message msg) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = msg.getSenderId(); _receiverId = msg.getSenderId(); _subject = ""; diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 5d9290d1f7..1dc96daa0a 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -40,7 +40,7 @@ import org.l2jmobius.gameserver.enums.InstanceType; import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ShotType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.MercTicketManager; import org.l2jmobius.gameserver.model.Augmentation; @@ -221,7 +221,7 @@ public class ItemInstance extends WorldObject */ public ItemInstance(int itemId) { - this(IdFactory.getNextId(), itemId); + this(IdManager.getInstance().getNextId(), itemId); } /** diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/olympiad/OlympiadGameTeams.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/olympiad/OlympiadGameTeams.java index 356da2cab3..5441bb1d35 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/olympiad/OlympiadGameTeams.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/olympiad/OlympiadGameTeams.java @@ -22,7 +22,7 @@ import java.util.logging.Level; import org.l2jmobius.Config; import org.l2jmobius.commons.util.Rnd; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Creature; @@ -75,7 +75,7 @@ public class OlympiadGameTeams extends AbstractOlympiadGame } else { - _teamOne[i] = new Participant(IdFactory.getNextId(), 1); + _teamOne[i] = new Participant(IdManager.getInstance().getNextId(), 1); } if (i < _teamTwoSize) @@ -89,7 +89,7 @@ public class OlympiadGameTeams extends AbstractOlympiadGame } else { - _teamTwo[i] = new Participant(IdFactory.getNextId(), 2); + _teamTwo[i] = new Participant(IdManager.getInstance().getNextId(), 2); } } } @@ -444,7 +444,7 @@ public class OlympiadGameTeams extends AbstractOlympiadGame } else { - IdFactory.releaseId(_teamOne[i].getObjectId()); + IdManager.getInstance().releaseId(_teamOne[i].getObjectId()); } if (i < _teamTwoSize) @@ -453,7 +453,7 @@ public class OlympiadGameTeams extends AbstractOlympiadGame } else { - IdFactory.releaseId(_teamTwo[i].getObjectId()); + IdManager.getInstance().releaseId(_teamTwo[i].getObjectId()); } _teamOne[i] = null; diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java index ee2437143a..7fa54aa75e 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java @@ -16,7 +16,7 @@ */ package org.l2jmobius.gameserver.model.zone; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -50,7 +50,7 @@ public abstract class ZoneForm protected final void dropDebugItem(int itemId, int num, int x, int y, int z) { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); item.setCount(num); item.spawnMe(x, y, z + 5); ZoneManager.getInstance().getDebugItems().add(item); diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/GameServer.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/GameServer.java index 7cdddb891e..f48b0fd94c 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/GameServer.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/GameServer.java @@ -105,7 +105,6 @@ import org.l2jmobius.gameserver.handler.ConditionHandler; import org.l2jmobius.gameserver.handler.DailyMissionHandler; import org.l2jmobius.gameserver.handler.EffectHandler; import org.l2jmobius.gameserver.handler.SkillConditionHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AirShipManager; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.BoatManager; @@ -122,6 +121,7 @@ import org.l2jmobius.gameserver.instancemanager.FakePlayerChatManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.GraciaSeedsManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.instancemanager.ItemAuctionManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; @@ -204,9 +204,9 @@ public class GameServer printSection("ThreadPool"); ThreadPool.init(); - printSection("IdFactory"); - IdFactory.init(); - if (!IdFactory.hasInitialized()) + printSection("IdManager"); + IdManager.getInstance(); + if (!IdManager.hasInitialized()) { LOGGER.severe(getClass().getSimpleName() + ": Could not read object IDs from database. Please check your configuration."); throw new Exception("Could not initialize the ID factory!"); @@ -420,7 +420,7 @@ public class GameServer Runtime.getRuntime().addShutdownHook(Shutdown.getInstance()); - LOGGER.info("IdFactory: Free ObjectID's remaining: " + IdFactory.size()); + LOGGER.info("IdManager: Free ObjectID's remaining: " + IdManager.size()); if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS) { diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java index 21cdff27ff..6fa1579a6d 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java @@ -35,10 +35,10 @@ import org.l2jmobius.gameserver.communitybbs.Manager.ForumsBBSManager; import org.l2jmobius.gameserver.data.xml.impl.ClanHallData; import org.l2jmobius.gameserver.enums.ClanWarState; import org.l2jmobius.gameserver.enums.UserInfoType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.ClanEntryManager; import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.SiegeManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -196,7 +196,7 @@ public class ClanTable return null; } - final Clan clan = new Clan(IdFactory.getNextId(), clanName); + final Clan clan = new Clan(IdManager.getInstance().getNextId(), clanName); final ClanMember leader = new ClanMember(clan, player); clan.setLeader(leader); leader.setPlayerInstance(player); @@ -271,7 +271,7 @@ public class ClanTable } _clans.remove(clanId); - IdFactory.releaseId(clanId); + IdManager.getInstance().releaseId(clanId); try (Connection con = DatabaseFactory.getConnection()) { diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/datatables/ItemTable.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/datatables/ItemTable.java index bfae3f7a36..facda38df8 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/datatables/ItemTable.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/datatables/ItemTable.java @@ -34,7 +34,7 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.data.xml.impl.EnchantItemHPBonusData; import org.l2jmobius.gameserver.engines.DocumentEngine; import org.l2jmobius.gameserver.enums.ItemLocation; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Attackable; @@ -209,7 +209,7 @@ public class ItemTable public ItemInstance createItem(String process, int itemId, long count, Creature actor, Object reference) { // Create and Init the ItemInstance corresponding to the Item Identifier - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); if (process.equalsIgnoreCase("loot") && !Config.AUTO_LOOT_ITEM_IDS.contains(itemId)) { ScheduledFuture itemLootShedule; @@ -327,7 +327,7 @@ public class ItemTable item.setLastChange(ItemInstance.REMOVED); World.getInstance().removeObject(item); - IdFactory.releaseId(item.getObjectId()); + IdManager.getInstance().releaseId(item.getObjectId()); if (Config.LOG_ITEMS) { diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/idfactory/IdFactory.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/idfactory/IdFactory.java deleted file mode 100644 index d4447a7dea..0000000000 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/idfactory/IdFactory.java +++ /dev/null @@ -1,337 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.l2jmobius.gameserver.idfactory; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.BitSet; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.logging.Logger; - -import org.l2jmobius.Config; -import org.l2jmobius.commons.concurrent.ThreadPool; -import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.util.PrimeFinder; - -/** - * @author Mobius (reworked from L2J version) - */ -public abstract class IdFactory -{ - private static final Logger LOGGER = Logger.getLogger(IdFactory.class.getName()); - - protected static final String[] ID_CHECKS = - { - "SELECT owner_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT object_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT charId FROM character_quests WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_contacts WHERE charId >= ? AND charId < ?", - "SELECT contactId FROM character_contacts WHERE contactId >= ? AND contactId < ?", - "SELECT charId FROM character_friends WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_friends WHERE friendId >= ? AND friendId < ?", - "SELECT charId FROM character_hennas WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipebook WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipeshoplist WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_shortcuts WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_macroses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills_save WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_subclasses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM characters WHERE charId >= ? AND charId < ?", - "SELECT clanid FROM characters WHERE clanid >= ? AND clanid < ?", - "SELECT clan_id FROM clan_data WHERE clan_id >= ? AND clan_id < ?", - "SELECT clan_id FROM siege_clans WHERE clan_id >= ? AND clan_id < ?", - "SELECT ally_id FROM clan_data WHERE ally_id >= ? AND ally_id < ?", - "SELECT leader_id FROM clan_data WHERE leader_id >= ? AND leader_id < ?", - "SELECT item_obj_id FROM pets WHERE item_obj_id >= ? AND item_obj_id < ?", - "SELECT object_id FROM itemsonground WHERE object_id >= ? AND object_id < ?", - "SELECT summonId FROM characters_summons WHERE summonId >= ? AND summonId < ?" - }; - //@formatter:off - private static final String[][] ID_EXTRACTS = - { - {"characters","charId"}, - {"items","object_id"}, - {"clan_data","clan_id"}, - {"itemsonground","object_id"}, - {"messages","messageId"} - }; - //@formatter:on - private static final String[] TIMESTAMPS_CLEAN = - { - "DELETE FROM character_instance_time WHERE time <= ?", - "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" - }; - public static final int FIRST_OID = 0x10000000; - public static final int LAST_OID = 0x7FFFFFFF; - public static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; - - private static BitSet _freeIds; - private static AtomicInteger _freeIdCount; - private static AtomicInteger _nextFreeId; - private static boolean _initialized; - - public static void init() - { - // Update characters online status. - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - statement.executeUpdate("UPDATE characters SET online = 0"); - LOGGER.info("Updated characters online status."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not update characters online status: " + e); - } - - // Cleanup database. - if (Config.DATABASE_CLEAN_UP) - { - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - final long cleanupStart = System.currentTimeMillis(); - int cleanCount = 0; - - // Characters - cleanCount += statement.executeUpdate("DELETE FROM account_gsdata WHERE account_gsdata.account_name NOT IN (SELECT account_name FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.contactId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.friendId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_hennas WHERE character_hennas.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_macroses WHERE character_macroses.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_quests WHERE character_quests.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_recipebook WHERE character_recipebook.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_recipeshoplist WHERE character_recipeshoplist.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_shortcuts WHERE character_shortcuts.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_skills WHERE character_skills.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_skills_save WHERE character_skills_save.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_subclasses WHERE character_subclasses.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_instance_time WHERE character_instance_time.charId NOT IN (SELECT charId FROM characters);"); - - // Items - cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id NOT IN (SELECT charId FROM characters) AND items.owner_id NOT IN (SELECT clan_id FROM clan_data) AND items.owner_id != -1;"); - cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id = -1 AND loc LIKE 'MAIL' AND loc_data NOT IN (SELECT messageId FROM messages WHERE senderId = -1);"); - cleanCount += statement.executeUpdate("DELETE FROM item_auction_bid WHERE item_auction_bid.playerObjId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM item_variations WHERE item_variations.itemId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_elementals WHERE item_elementals.itemId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_special_abilities WHERE item_special_abilities.objectId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_variables WHERE item_variables.id NOT IN (SELECT object_id FROM items);"); - - // Misc - cleanCount += statement.executeUpdate("DELETE FROM cursed_weapons WHERE cursed_weapons.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM heroes WHERE heroes.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles WHERE olympiad_nobles.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles_eom WHERE olympiad_nobles_eom.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM pets WHERE pets.item_obj_id NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM merchant_lease WHERE merchant_lease.player_id NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_reco_bonus WHERE character_reco_bonus.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.leader_id NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.clan_id NOT IN (SELECT clanid FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charOneId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charTwoId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM heroes_diary WHERE heroes_diary.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade WHERE character_offline_trade.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade_items WHERE character_offline_trade_items.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_tpbookmark WHERE character_tpbookmark.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_variables WHERE character_variables.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM bot_reported_char_data WHERE bot_reported_char_data.botId NOT IN (SELECT charId FROM characters);"); - - // Clan - cleanCount += statement.executeUpdate("DELETE FROM clan_privs WHERE clan_privs.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_skills WHERE clan_skills.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_subpledges WHERE clan_subpledges.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan1 NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan2 NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM siege_clans WHERE siege_clans.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_notices WHERE clan_notices.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM auction_bid WHERE auction_bid.bidderId NOT IN (SELECT clan_id FROM clan_data);"); - - // Forums - cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT clan_id FROM clan_data) AND forums.forum_parent=2;"); - cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT charId FROM characters) AND forums.forum_parent=3;"); - cleanCount += statement.executeUpdate("DELETE FROM posts WHERE posts.post_forum_id NOT IN (SELECT forum_id FROM forums);"); - cleanCount += statement.executeUpdate("DELETE FROM topic WHERE topic.topic_forum_id NOT IN (SELECT forum_id FROM forums);"); - - // Update needed items after cleaning has taken place. - statement.executeUpdate("UPDATE clan_data SET auction_bid_at = 0 WHERE auction_bid_at NOT IN (SELECT auctionId FROM auction_bid);"); - statement.executeUpdate("UPDATE clan_data SET new_leader_id = 0 WHERE new_leader_id <> 0 AND new_leader_id NOT IN (SELECT charId FROM characters);"); - statement.executeUpdate("UPDATE clan_subpledges SET leader_id=0 WHERE clan_subpledges.leader_id NOT IN (SELECT charId FROM characters) AND leader_id > 0;"); - statement.executeUpdate("UPDATE castle SET side='NEUTRAL' WHERE castle.id NOT IN (SELECT hasCastle FROM clan_data);"); - statement.executeUpdate("UPDATE characters SET clanid=0, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0, clan_join_expiry_time=0, clan_create_expiry_time=0 WHERE characters.clanid > 0 AND characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); - statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); - - LOGGER.info("IdFactory: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not clean up database: " + e); - } - } - - // Cleanup timestamps. - try (Connection con = DatabaseFactory.getConnection()) - { - int cleanCount = 0; - for (String line : TIMESTAMPS_CLEAN) - { - try (PreparedStatement statement = con.prepareStatement(line)) - { - statement.setLong(1, System.currentTimeMillis()); - cleanCount += statement.executeUpdate(); - } - } - LOGGER.info("IdFactory: Cleaned " + cleanCount + " expired timestamps from database."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not clean expired timestamps from database. " + e); - } - - // Initialize. - try - { - _freeIds = new BitSet(PrimeFinder.nextPrime(100000)); - _freeIds.clear(); - _freeIdCount = new AtomicInteger(FREE_OBJECT_ID_SIZE); - - // Collect already used ids. - final List usedIds = new ArrayList<>(); - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - String extractUsedObjectIdsQuery = ""; - for (String[] tblClmn : ID_EXTRACTS) - { - extractUsedObjectIdsQuery += "SELECT " + tblClmn[1] + " FROM " + tblClmn[0] + " UNION "; - } - extractUsedObjectIdsQuery = extractUsedObjectIdsQuery.substring(0, extractUsedObjectIdsQuery.length() - 7); // Remove the last " UNION " - try (ResultSet result = statement.executeQuery(extractUsedObjectIdsQuery)) - { - while (result.next()) - { - usedIds.add(result.getInt(1)); - } - } - } - Collections.sort(usedIds); - - // Register used ids. - for (int usedObjectId : usedIds) - { - final int objectId = usedObjectId - FIRST_OID; - if (objectId < 0) - { - LOGGER.warning("IdFactory: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); - continue; - } - _freeIds.set(usedObjectId - FIRST_OID); - _freeIdCount.decrementAndGet(); - } - - _nextFreeId = new AtomicInteger(_freeIds.nextClearBit(0)); - _initialized = true; - } - catch (Exception e) - { - _initialized = false; - LOGGER.severe("IdFactory: Could not be initialized properly: " + e.getMessage()); - } - - // Schedule increase capacity task. - ThreadPool.scheduleAtFixedRate(() -> - { - synchronized (_nextFreeId) - { - if (PrimeFinder.nextPrime((usedIdCount() * 11) / 10) > _freeIds.size()) - { - increaseBitSetCapacity(); - } - } - }, 30000, 30000); - - LOGGER.info("IdFactory: " + _freeIds.size() + " id's available."); - } - - public synchronized static void releaseId(int objectId) - { - synchronized (_nextFreeId) - { - if ((objectId - FIRST_OID) > -1) - { - _freeIds.clear(objectId - FIRST_OID); - _freeIdCount.incrementAndGet(); - } - else - { - LOGGER.warning("IdFactory: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); - } - } - } - - public synchronized static int getNextId() - { - synchronized (_nextFreeId) - { - final int newId = _nextFreeId.get(); - _freeIds.set(newId); - _freeIdCount.decrementAndGet(); - - final int nextFree = _freeIds.nextClearBit(newId) < 0 ? _freeIds.nextClearBit(0) : _freeIds.nextClearBit(newId); - if (nextFree < 0) - { - if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) - { - throw new NullPointerException("IdFactory: Ran out of valid ids."); - } - increaseBitSetCapacity(); - } - _nextFreeId.set(nextFree); - - return newId + FIRST_OID; - } - } - - private static void increaseBitSetCapacity() - { - final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); - newBitSet.or(_freeIds); - _freeIds = newBitSet; - } - - private static int usedIdCount() - { - return _freeIdCount.get() - FIRST_OID; - } - - public static int size() - { - return _freeIdCount.get(); - } - - public static boolean hasInitialized() - { - return _initialized; - } -} diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/instancemanager/IdManager.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/instancemanager/IdManager.java new file mode 100644 index 0000000000..d595a5befa --- /dev/null +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/instancemanager/IdManager.java @@ -0,0 +1,322 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.instancemanager; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.BitSet; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Logger; + +import org.l2jmobius.Config; +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.commons.database.DatabaseFactory; +import org.l2jmobius.gameserver.util.PrimeFinder; + +/** + * @author Mobius (reworked from L2J IdFactory) + */ +public class IdManager +{ + private static final Logger LOGGER = Logger.getLogger(IdManager.class.getName()); + + //@formatter:off + private static final String[][] ID_EXTRACTS = + { + {"characters","charId"}, + {"items","object_id"}, + {"clan_data","clan_id"}, + {"itemsonground","object_id"}, + {"messages","messageId"} + }; + //@formatter:on + + private static final String[] TIMESTAMPS_CLEAN = + { + "DELETE FROM character_instance_time WHERE time <= ?", + "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" + }; + + private static final int FIRST_OID = 0x10000000; + private static final int LAST_OID = 0x7FFFFFFF; + private static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; + + private static BitSet _freeIds; + private static AtomicInteger _freeIdCount; + private static AtomicInteger _nextFreeId; + private static boolean _initialized; + + public IdManager() + { + // Update characters online status. + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + statement.executeUpdate("UPDATE characters SET online = 0"); + LOGGER.info("Updated characters online status."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not update characters online status: " + e); + } + + // Cleanup database. + if (Config.DATABASE_CLEAN_UP) + { + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + final long cleanupStart = System.currentTimeMillis(); + int cleanCount = 0; + + // Characters + cleanCount += statement.executeUpdate("DELETE FROM account_gsdata WHERE account_gsdata.account_name NOT IN (SELECT account_name FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.contactId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.friendId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_hennas WHERE character_hennas.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_macroses WHERE character_macroses.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_quests WHERE character_quests.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_recipebook WHERE character_recipebook.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_recipeshoplist WHERE character_recipeshoplist.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_shortcuts WHERE character_shortcuts.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_skills WHERE character_skills.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_skills_save WHERE character_skills_save.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_subclasses WHERE character_subclasses.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_instance_time WHERE character_instance_time.charId NOT IN (SELECT charId FROM characters);"); + + // Items + cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id NOT IN (SELECT charId FROM characters) AND items.owner_id NOT IN (SELECT clan_id FROM clan_data) AND items.owner_id != -1;"); + cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id = -1 AND loc LIKE 'MAIL' AND loc_data NOT IN (SELECT messageId FROM messages WHERE senderId = -1);"); + cleanCount += statement.executeUpdate("DELETE FROM item_auction_bid WHERE item_auction_bid.playerObjId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM item_variations WHERE item_variations.itemId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_elementals WHERE item_elementals.itemId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_special_abilities WHERE item_special_abilities.objectId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_variables WHERE item_variables.id NOT IN (SELECT object_id FROM items);"); + + // Misc + cleanCount += statement.executeUpdate("DELETE FROM cursed_weapons WHERE cursed_weapons.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM heroes WHERE heroes.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles WHERE olympiad_nobles.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles_eom WHERE olympiad_nobles_eom.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM pets WHERE pets.item_obj_id NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM merchant_lease WHERE merchant_lease.player_id NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_reco_bonus WHERE character_reco_bonus.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.leader_id NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.clan_id NOT IN (SELECT clanid FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charOneId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charTwoId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM heroes_diary WHERE heroes_diary.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade WHERE character_offline_trade.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade_items WHERE character_offline_trade_items.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_tpbookmark WHERE character_tpbookmark.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_variables WHERE character_variables.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM bot_reported_char_data WHERE bot_reported_char_data.botId NOT IN (SELECT charId FROM characters);"); + + // Clan + cleanCount += statement.executeUpdate("DELETE FROM clan_privs WHERE clan_privs.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_skills WHERE clan_skills.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_subpledges WHERE clan_subpledges.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan1 NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan2 NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM siege_clans WHERE siege_clans.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_notices WHERE clan_notices.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM auction_bid WHERE auction_bid.bidderId NOT IN (SELECT clan_id FROM clan_data);"); + + // Forums + cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT clan_id FROM clan_data) AND forums.forum_parent=2;"); + cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT charId FROM characters) AND forums.forum_parent=3;"); + cleanCount += statement.executeUpdate("DELETE FROM posts WHERE posts.post_forum_id NOT IN (SELECT forum_id FROM forums);"); + cleanCount += statement.executeUpdate("DELETE FROM topic WHERE topic.topic_forum_id NOT IN (SELECT forum_id FROM forums);"); + + // Update needed items after cleaning has taken place. + statement.executeUpdate("UPDATE clan_data SET auction_bid_at = 0 WHERE auction_bid_at NOT IN (SELECT auctionId FROM auction_bid);"); + statement.executeUpdate("UPDATE clan_data SET new_leader_id = 0 WHERE new_leader_id <> 0 AND new_leader_id NOT IN (SELECT charId FROM characters);"); + statement.executeUpdate("UPDATE clan_subpledges SET leader_id=0 WHERE clan_subpledges.leader_id NOT IN (SELECT charId FROM characters) AND leader_id > 0;"); + statement.executeUpdate("UPDATE castle SET side='NEUTRAL' WHERE castle.id NOT IN (SELECT hasCastle FROM clan_data);"); + statement.executeUpdate("UPDATE characters SET clanid=0, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0, clan_join_expiry_time=0, clan_create_expiry_time=0 WHERE characters.clanid > 0 AND characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); + statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); + + LOGGER.info("IdManager: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not clean up database: " + e); + } + } + + // Cleanup timestamps. + try (Connection con = DatabaseFactory.getConnection()) + { + int cleanCount = 0; + for (String line : TIMESTAMPS_CLEAN) + { + try (PreparedStatement statement = con.prepareStatement(line)) + { + statement.setLong(1, System.currentTimeMillis()); + cleanCount += statement.executeUpdate(); + } + } + LOGGER.info("IdManager: Cleaned " + cleanCount + " expired timestamps from database."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not clean expired timestamps from database. " + e); + } + + // Initialize. + try + { + _freeIds = new BitSet(PrimeFinder.nextPrime(100000)); + _freeIds.clear(); + _freeIdCount = new AtomicInteger(FREE_OBJECT_ID_SIZE); + + // Collect already used ids. + final List usedIds = new ArrayList<>(); + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + String extractUsedObjectIdsQuery = ""; + for (String[] tblClmn : ID_EXTRACTS) + { + extractUsedObjectIdsQuery += "SELECT " + tblClmn[1] + " FROM " + tblClmn[0] + " UNION "; + } + extractUsedObjectIdsQuery = extractUsedObjectIdsQuery.substring(0, extractUsedObjectIdsQuery.length() - 7); // Remove the last " UNION " + try (ResultSet result = statement.executeQuery(extractUsedObjectIdsQuery)) + { + while (result.next()) + { + usedIds.add(result.getInt(1)); + } + } + } + Collections.sort(usedIds); + + // Register used ids. + for (int usedObjectId : usedIds) + { + final int objectId = usedObjectId - FIRST_OID; + if (objectId < 0) + { + LOGGER.warning("IdManager: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); + continue; + } + _freeIds.set(usedObjectId - FIRST_OID); + _freeIdCount.decrementAndGet(); + } + + _nextFreeId = new AtomicInteger(_freeIds.nextClearBit(0)); + _initialized = true; + } + catch (Exception e) + { + _initialized = false; + LOGGER.severe("IdManager: Could not be initialized properly: " + e.getMessage()); + } + + // Schedule increase capacity task. + ThreadPool.scheduleAtFixedRate(() -> + { + synchronized (_nextFreeId) + { + if (PrimeFinder.nextPrime((usedIdCount() * 11) / 10) > _freeIds.size()) + { + increaseBitSetCapacity(); + } + } + }, 30000, 30000); + + LOGGER.info("IdManager: " + _freeIds.size() + " id's available."); + } + + public void releaseId(int objectId) + { + synchronized (_nextFreeId) + { + if ((objectId - FIRST_OID) > -1) + { + _freeIds.clear(objectId - FIRST_OID); + _freeIdCount.incrementAndGet(); + } + else + { + LOGGER.warning("IdManager: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); + } + } + } + + public int getNextId() + { + synchronized (_nextFreeId) + { + final int newId = _nextFreeId.get(); + _freeIds.set(newId); + _freeIdCount.decrementAndGet(); + + final int nextFree = _freeIds.nextClearBit(newId) < 0 ? _freeIds.nextClearBit(0) : _freeIds.nextClearBit(newId); + if (nextFree < 0) + { + if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) + { + throw new NullPointerException("IdManager: Ran out of valid ids."); + } + increaseBitSetCapacity(); + } + _nextFreeId.set(nextFree); + + return newId + FIRST_OID; + } + } + + private void increaseBitSetCapacity() + { + final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); + newBitSet.or(_freeIds); + _freeIds = newBitSet; + } + + private int usedIdCount() + { + return _freeIdCount.get() - FIRST_OID; + } + + public static int size() + { + return _freeIdCount.get(); + } + + public static boolean hasInitialized() + { + return _initialized; + } + + public static IdManager getInstance() + { + return SingletonHolder.INSTANCE; + } + + private static class SingletonHolder + { + protected static final IdManager INSTANCE = new IdManager(); + } +} diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/instancemanager/MailManager.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/instancemanager/MailManager.java index 176b407caa..2a82541b39 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/instancemanager/MailManager.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/instancemanager/MailManager.java @@ -31,7 +31,6 @@ import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.entity.Message; @@ -277,7 +276,7 @@ public class MailManager } _messages.remove(msgId); - IdFactory.releaseId(msgId); + IdManager.getInstance().releaseId(msgId); } /** diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/Petition.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/Petition.java index 0c1524f59b..b19b6f9025 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/Petition.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/Petition.java @@ -21,7 +21,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.PetitionState; import org.l2jmobius.gameserver.enums.PetitionType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.PetitionManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -47,7 +47,7 @@ public class Petition public Petition(PlayerInstance petitioner, String petitionText, int petitionType) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _type = PetitionType.values()[petitionType - 1]; _content = petitionText; _petitioner = petitioner; diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/WorldObject.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/WorldObject.java index 18e793a718..3b8f7fb5fb 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/WorldObject.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/WorldObject.java @@ -24,7 +24,7 @@ import org.l2jmobius.gameserver.handler.ActionHandler; import org.l2jmobius.gameserver.handler.ActionShiftHandler; import org.l2jmobius.gameserver.handler.IActionHandler; import org.l2jmobius.gameserver.handler.IActionShiftHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; @@ -154,8 +154,8 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif public void refreshId() { World.getInstance().removeObject(this); - IdFactory.releaseId(getObjectId()); - _objectId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(getObjectId()); + _objectId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java index e706a20968..56e4999036 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -63,7 +63,7 @@ import org.l2jmobius.gameserver.enums.Team; import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MapRegionManager; import org.l2jmobius.gameserver.instancemanager.QuestManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; @@ -288,7 +288,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public Creature(CreatureTemplate template) { - this(IdFactory.getNextId(), template); + this(IdManager.getInstance().getNextId(), template); } /** diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java index d132ad18fc..12209da801 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java @@ -20,7 +20,7 @@ import java.util.concurrent.Future; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.gameserver.enums.InstanceType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.stat.ControllableAirShipStat; import org.l2jmobius.gameserver.model.actor.templates.CreatureTemplate; import org.l2jmobius.gameserver.model.skills.AbnormalType; @@ -48,7 +48,7 @@ public class ControllableAirShipInstance extends AirShipInstance super(template); setInstanceType(InstanceType.ControllableAirShipInstance); _ownerId = ownerId; - _helmId = IdFactory.getNextId(); // not forget to release ! + _helmId = IdManager.getInstance().getNextId(); // not forget to release ! } @Override @@ -282,8 +282,8 @@ public class ControllableAirShipInstance extends AirShipInstance public void refreshId() { super.refreshId(); - IdFactory.releaseId(_helmId); - _helmId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(_helmId); + _helmId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java index 48c52c920f..c8412e68be 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.actor.instance; import org.l2jmobius.gameserver.data.xml.impl.FenceData; import org.l2jmobius.gameserver.enums.FenceState; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; @@ -44,7 +44,7 @@ public class FenceInstance extends WorldObject public FenceInstance(int x, int y, String name, int width, int length, int height, FenceState state) { - super(IdFactory.getNextId()); + super(IdManager.getInstance().getNextId()); _xMin = x - (width / 2); _xMax = x + (width / 2); @@ -59,7 +59,7 @@ public class FenceInstance extends WorldObject _heightFences = new int[height - 1]; for (int i = 0; i < _heightFences.length; i++) { - _heightFences[i] = IdFactory.getNextId(); + _heightFences[i] = IdManager.getInstance().getNextId(); } } } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index e3d487dead..021ba29232 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -105,7 +105,6 @@ import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; import org.l2jmobius.gameserver.handler.IItemHandler; import org.l2jmobius.gameserver.handler.ItemHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CursedWeaponsManager; @@ -114,6 +113,7 @@ import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.HandysBlockCheckerManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager; import org.l2jmobius.gameserver.instancemanager.MentorManager; @@ -1140,7 +1140,7 @@ public class PlayerInstance extends Playable */ private PlayerInstance(PlayerTemplate template, String accountName, PlayerAppearance app) { - this(IdFactory.getNextId(), template, accountName, app); + this(IdManager.getInstance().getNextId(), template, accountName, app); } @Override diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java index 0564bbbe5e..b493b68bcc 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java @@ -21,7 +21,7 @@ import java.util.Locale; import org.l2jmobius.Config; import org.l2jmobius.commons.util.StringUtil; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.HistoryInfo; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.RaceState; @@ -160,7 +160,7 @@ public class RaceManagerInstance extends Npc player.setRace(0, 0); player.setRace(1, 0); - ItemInstance item = new ItemInstance(IdFactory.getNextId(), 4443); + ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 4443); item.setCount(1); item.setEnchantLevel(MonsterRace.getInstance().getRaceNumber()); item.setCustomType1(ticket); diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java index 6762897720..929d68a27f 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.announce; import java.util.Date; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.script.DateRange; /** @@ -32,7 +32,7 @@ public class EventAnnouncement implements IAnnouncement public EventAnnouncement(DateRange range, String content) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _range = range; _content = content; } @@ -88,7 +88,7 @@ public class EventAnnouncement implements IAnnouncement @Override public boolean deleteMe() { - IdFactory.releaseId(_id); + IdManager.getInstance().releaseId(_id); return true; } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/entity/Couple.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/entity/Couple.java index 6897b8d681..54104ff7ab 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/entity/Couple.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/entity/Couple.java @@ -24,7 +24,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; /** @@ -85,7 +85,7 @@ public class Couple try (Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO mods_wedding (id, player1Id, player2Id, married, affianceDate, weddingDate) VALUES (?, ?, ?, ?, ?, ?)")) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); ps.setInt(1, _id); ps.setInt(2, _player1Id); ps.setInt(3, _player2Id); diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/entity/Message.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/entity/Message.java index 1b0ebe1d93..9002ebdc1a 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/entity/Message.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/entity/Message.java @@ -24,7 +24,7 @@ import java.sql.SQLException; import org.l2jmobius.gameserver.data.sql.impl.CharNameTable; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MailManager; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -99,7 +99,7 @@ public class Message */ public Message(int senderId, int receiverId, boolean isCod, String subject, String text, long reqAdena) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -118,7 +118,7 @@ public class Message */ public Message(int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = subject; @@ -138,7 +138,7 @@ public class Message */ public Message(int senderId, int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -157,7 +157,7 @@ public class Message */ public Message(Message msg) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = msg.getSenderId(); _receiverId = msg.getSenderId(); _subject = ""; @@ -177,7 +177,7 @@ public class Message public Message(int receiverId, ItemInstance item, MailType mailType) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = ""; diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java index e1e27e6111..800fb576c7 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java @@ -17,7 +17,7 @@ package org.l2jmobius.gameserver.model.itemauction; import org.l2jmobius.gameserver.datatables.ItemTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -78,7 +78,7 @@ public class AuctionItem public ItemInstance createNewItemInstance() { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), _itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), _itemId); World.getInstance().addObject(item); item.setCount(_itemCount); item.setEnchantLevel(item.getItem().getDefaultEnchantLevel()); diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 65b343278c..db7f1e7095 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -47,8 +47,8 @@ import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemSkillType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.CastleManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.SiegeGuardManager; import org.l2jmobius.gameserver.model.DropProtection; @@ -259,7 +259,7 @@ public class ItemInstance extends WorldObject */ public ItemInstance(int itemId) { - this(IdFactory.getNextId(), itemId); + this(IdManager.getInstance().getNextId(), itemId); } /** diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java index ee2437143a..7fa54aa75e 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java @@ -16,7 +16,7 @@ */ package org.l2jmobius.gameserver.model.zone; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -50,7 +50,7 @@ public abstract class ZoneForm protected final void dropDebugItem(int itemId, int num, int x, int y, int z) { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); item.setCount(num); item.spawnMe(x, y, z + 5); ZoneManager.getInstance().getDebugItems().add(item); diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/GameServer.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/GameServer.java index 7cdddb891e..f48b0fd94c 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/GameServer.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/GameServer.java @@ -105,7 +105,6 @@ import org.l2jmobius.gameserver.handler.ConditionHandler; import org.l2jmobius.gameserver.handler.DailyMissionHandler; import org.l2jmobius.gameserver.handler.EffectHandler; import org.l2jmobius.gameserver.handler.SkillConditionHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AirShipManager; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.BoatManager; @@ -122,6 +121,7 @@ import org.l2jmobius.gameserver.instancemanager.FakePlayerChatManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.GraciaSeedsManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.instancemanager.ItemAuctionManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; @@ -204,9 +204,9 @@ public class GameServer printSection("ThreadPool"); ThreadPool.init(); - printSection("IdFactory"); - IdFactory.init(); - if (!IdFactory.hasInitialized()) + printSection("IdManager"); + IdManager.getInstance(); + if (!IdManager.hasInitialized()) { LOGGER.severe(getClass().getSimpleName() + ": Could not read object IDs from database. Please check your configuration."); throw new Exception("Could not initialize the ID factory!"); @@ -420,7 +420,7 @@ public class GameServer Runtime.getRuntime().addShutdownHook(Shutdown.getInstance()); - LOGGER.info("IdFactory: Free ObjectID's remaining: " + IdFactory.size()); + LOGGER.info("IdManager: Free ObjectID's remaining: " + IdManager.size()); if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS) { diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java index 21cdff27ff..6fa1579a6d 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java @@ -35,10 +35,10 @@ import org.l2jmobius.gameserver.communitybbs.Manager.ForumsBBSManager; import org.l2jmobius.gameserver.data.xml.impl.ClanHallData; import org.l2jmobius.gameserver.enums.ClanWarState; import org.l2jmobius.gameserver.enums.UserInfoType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.ClanEntryManager; import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.SiegeManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -196,7 +196,7 @@ public class ClanTable return null; } - final Clan clan = new Clan(IdFactory.getNextId(), clanName); + final Clan clan = new Clan(IdManager.getInstance().getNextId(), clanName); final ClanMember leader = new ClanMember(clan, player); clan.setLeader(leader); leader.setPlayerInstance(player); @@ -271,7 +271,7 @@ public class ClanTable } _clans.remove(clanId); - IdFactory.releaseId(clanId); + IdManager.getInstance().releaseId(clanId); try (Connection con = DatabaseFactory.getConnection()) { diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/datatables/ItemTable.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/datatables/ItemTable.java index bfae3f7a36..facda38df8 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/datatables/ItemTable.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/datatables/ItemTable.java @@ -34,7 +34,7 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.data.xml.impl.EnchantItemHPBonusData; import org.l2jmobius.gameserver.engines.DocumentEngine; import org.l2jmobius.gameserver.enums.ItemLocation; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Attackable; @@ -209,7 +209,7 @@ public class ItemTable public ItemInstance createItem(String process, int itemId, long count, Creature actor, Object reference) { // Create and Init the ItemInstance corresponding to the Item Identifier - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); if (process.equalsIgnoreCase("loot") && !Config.AUTO_LOOT_ITEM_IDS.contains(itemId)) { ScheduledFuture itemLootShedule; @@ -327,7 +327,7 @@ public class ItemTable item.setLastChange(ItemInstance.REMOVED); World.getInstance().removeObject(item); - IdFactory.releaseId(item.getObjectId()); + IdManager.getInstance().releaseId(item.getObjectId()); if (Config.LOG_ITEMS) { diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/idfactory/IdFactory.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/idfactory/IdFactory.java deleted file mode 100644 index d4447a7dea..0000000000 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/idfactory/IdFactory.java +++ /dev/null @@ -1,337 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.l2jmobius.gameserver.idfactory; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.BitSet; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.logging.Logger; - -import org.l2jmobius.Config; -import org.l2jmobius.commons.concurrent.ThreadPool; -import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.util.PrimeFinder; - -/** - * @author Mobius (reworked from L2J version) - */ -public abstract class IdFactory -{ - private static final Logger LOGGER = Logger.getLogger(IdFactory.class.getName()); - - protected static final String[] ID_CHECKS = - { - "SELECT owner_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT object_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT charId FROM character_quests WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_contacts WHERE charId >= ? AND charId < ?", - "SELECT contactId FROM character_contacts WHERE contactId >= ? AND contactId < ?", - "SELECT charId FROM character_friends WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_friends WHERE friendId >= ? AND friendId < ?", - "SELECT charId FROM character_hennas WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipebook WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipeshoplist WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_shortcuts WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_macroses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills_save WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_subclasses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM characters WHERE charId >= ? AND charId < ?", - "SELECT clanid FROM characters WHERE clanid >= ? AND clanid < ?", - "SELECT clan_id FROM clan_data WHERE clan_id >= ? AND clan_id < ?", - "SELECT clan_id FROM siege_clans WHERE clan_id >= ? AND clan_id < ?", - "SELECT ally_id FROM clan_data WHERE ally_id >= ? AND ally_id < ?", - "SELECT leader_id FROM clan_data WHERE leader_id >= ? AND leader_id < ?", - "SELECT item_obj_id FROM pets WHERE item_obj_id >= ? AND item_obj_id < ?", - "SELECT object_id FROM itemsonground WHERE object_id >= ? AND object_id < ?", - "SELECT summonId FROM characters_summons WHERE summonId >= ? AND summonId < ?" - }; - //@formatter:off - private static final String[][] ID_EXTRACTS = - { - {"characters","charId"}, - {"items","object_id"}, - {"clan_data","clan_id"}, - {"itemsonground","object_id"}, - {"messages","messageId"} - }; - //@formatter:on - private static final String[] TIMESTAMPS_CLEAN = - { - "DELETE FROM character_instance_time WHERE time <= ?", - "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" - }; - public static final int FIRST_OID = 0x10000000; - public static final int LAST_OID = 0x7FFFFFFF; - public static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; - - private static BitSet _freeIds; - private static AtomicInteger _freeIdCount; - private static AtomicInteger _nextFreeId; - private static boolean _initialized; - - public static void init() - { - // Update characters online status. - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - statement.executeUpdate("UPDATE characters SET online = 0"); - LOGGER.info("Updated characters online status."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not update characters online status: " + e); - } - - // Cleanup database. - if (Config.DATABASE_CLEAN_UP) - { - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - final long cleanupStart = System.currentTimeMillis(); - int cleanCount = 0; - - // Characters - cleanCount += statement.executeUpdate("DELETE FROM account_gsdata WHERE account_gsdata.account_name NOT IN (SELECT account_name FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.contactId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.friendId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_hennas WHERE character_hennas.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_macroses WHERE character_macroses.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_quests WHERE character_quests.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_recipebook WHERE character_recipebook.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_recipeshoplist WHERE character_recipeshoplist.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_shortcuts WHERE character_shortcuts.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_skills WHERE character_skills.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_skills_save WHERE character_skills_save.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_subclasses WHERE character_subclasses.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_instance_time WHERE character_instance_time.charId NOT IN (SELECT charId FROM characters);"); - - // Items - cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id NOT IN (SELECT charId FROM characters) AND items.owner_id NOT IN (SELECT clan_id FROM clan_data) AND items.owner_id != -1;"); - cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id = -1 AND loc LIKE 'MAIL' AND loc_data NOT IN (SELECT messageId FROM messages WHERE senderId = -1);"); - cleanCount += statement.executeUpdate("DELETE FROM item_auction_bid WHERE item_auction_bid.playerObjId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM item_variations WHERE item_variations.itemId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_elementals WHERE item_elementals.itemId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_special_abilities WHERE item_special_abilities.objectId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_variables WHERE item_variables.id NOT IN (SELECT object_id FROM items);"); - - // Misc - cleanCount += statement.executeUpdate("DELETE FROM cursed_weapons WHERE cursed_weapons.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM heroes WHERE heroes.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles WHERE olympiad_nobles.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles_eom WHERE olympiad_nobles_eom.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM pets WHERE pets.item_obj_id NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM merchant_lease WHERE merchant_lease.player_id NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_reco_bonus WHERE character_reco_bonus.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.leader_id NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.clan_id NOT IN (SELECT clanid FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charOneId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charTwoId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM heroes_diary WHERE heroes_diary.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade WHERE character_offline_trade.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade_items WHERE character_offline_trade_items.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_tpbookmark WHERE character_tpbookmark.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_variables WHERE character_variables.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM bot_reported_char_data WHERE bot_reported_char_data.botId NOT IN (SELECT charId FROM characters);"); - - // Clan - cleanCount += statement.executeUpdate("DELETE FROM clan_privs WHERE clan_privs.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_skills WHERE clan_skills.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_subpledges WHERE clan_subpledges.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan1 NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan2 NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM siege_clans WHERE siege_clans.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_notices WHERE clan_notices.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM auction_bid WHERE auction_bid.bidderId NOT IN (SELECT clan_id FROM clan_data);"); - - // Forums - cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT clan_id FROM clan_data) AND forums.forum_parent=2;"); - cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT charId FROM characters) AND forums.forum_parent=3;"); - cleanCount += statement.executeUpdate("DELETE FROM posts WHERE posts.post_forum_id NOT IN (SELECT forum_id FROM forums);"); - cleanCount += statement.executeUpdate("DELETE FROM topic WHERE topic.topic_forum_id NOT IN (SELECT forum_id FROM forums);"); - - // Update needed items after cleaning has taken place. - statement.executeUpdate("UPDATE clan_data SET auction_bid_at = 0 WHERE auction_bid_at NOT IN (SELECT auctionId FROM auction_bid);"); - statement.executeUpdate("UPDATE clan_data SET new_leader_id = 0 WHERE new_leader_id <> 0 AND new_leader_id NOT IN (SELECT charId FROM characters);"); - statement.executeUpdate("UPDATE clan_subpledges SET leader_id=0 WHERE clan_subpledges.leader_id NOT IN (SELECT charId FROM characters) AND leader_id > 0;"); - statement.executeUpdate("UPDATE castle SET side='NEUTRAL' WHERE castle.id NOT IN (SELECT hasCastle FROM clan_data);"); - statement.executeUpdate("UPDATE characters SET clanid=0, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0, clan_join_expiry_time=0, clan_create_expiry_time=0 WHERE characters.clanid > 0 AND characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); - statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); - - LOGGER.info("IdFactory: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not clean up database: " + e); - } - } - - // Cleanup timestamps. - try (Connection con = DatabaseFactory.getConnection()) - { - int cleanCount = 0; - for (String line : TIMESTAMPS_CLEAN) - { - try (PreparedStatement statement = con.prepareStatement(line)) - { - statement.setLong(1, System.currentTimeMillis()); - cleanCount += statement.executeUpdate(); - } - } - LOGGER.info("IdFactory: Cleaned " + cleanCount + " expired timestamps from database."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not clean expired timestamps from database. " + e); - } - - // Initialize. - try - { - _freeIds = new BitSet(PrimeFinder.nextPrime(100000)); - _freeIds.clear(); - _freeIdCount = new AtomicInteger(FREE_OBJECT_ID_SIZE); - - // Collect already used ids. - final List usedIds = new ArrayList<>(); - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - String extractUsedObjectIdsQuery = ""; - for (String[] tblClmn : ID_EXTRACTS) - { - extractUsedObjectIdsQuery += "SELECT " + tblClmn[1] + " FROM " + tblClmn[0] + " UNION "; - } - extractUsedObjectIdsQuery = extractUsedObjectIdsQuery.substring(0, extractUsedObjectIdsQuery.length() - 7); // Remove the last " UNION " - try (ResultSet result = statement.executeQuery(extractUsedObjectIdsQuery)) - { - while (result.next()) - { - usedIds.add(result.getInt(1)); - } - } - } - Collections.sort(usedIds); - - // Register used ids. - for (int usedObjectId : usedIds) - { - final int objectId = usedObjectId - FIRST_OID; - if (objectId < 0) - { - LOGGER.warning("IdFactory: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); - continue; - } - _freeIds.set(usedObjectId - FIRST_OID); - _freeIdCount.decrementAndGet(); - } - - _nextFreeId = new AtomicInteger(_freeIds.nextClearBit(0)); - _initialized = true; - } - catch (Exception e) - { - _initialized = false; - LOGGER.severe("IdFactory: Could not be initialized properly: " + e.getMessage()); - } - - // Schedule increase capacity task. - ThreadPool.scheduleAtFixedRate(() -> - { - synchronized (_nextFreeId) - { - if (PrimeFinder.nextPrime((usedIdCount() * 11) / 10) > _freeIds.size()) - { - increaseBitSetCapacity(); - } - } - }, 30000, 30000); - - LOGGER.info("IdFactory: " + _freeIds.size() + " id's available."); - } - - public synchronized static void releaseId(int objectId) - { - synchronized (_nextFreeId) - { - if ((objectId - FIRST_OID) > -1) - { - _freeIds.clear(objectId - FIRST_OID); - _freeIdCount.incrementAndGet(); - } - else - { - LOGGER.warning("IdFactory: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); - } - } - } - - public synchronized static int getNextId() - { - synchronized (_nextFreeId) - { - final int newId = _nextFreeId.get(); - _freeIds.set(newId); - _freeIdCount.decrementAndGet(); - - final int nextFree = _freeIds.nextClearBit(newId) < 0 ? _freeIds.nextClearBit(0) : _freeIds.nextClearBit(newId); - if (nextFree < 0) - { - if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) - { - throw new NullPointerException("IdFactory: Ran out of valid ids."); - } - increaseBitSetCapacity(); - } - _nextFreeId.set(nextFree); - - return newId + FIRST_OID; - } - } - - private static void increaseBitSetCapacity() - { - final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); - newBitSet.or(_freeIds); - _freeIds = newBitSet; - } - - private static int usedIdCount() - { - return _freeIdCount.get() - FIRST_OID; - } - - public static int size() - { - return _freeIdCount.get(); - } - - public static boolean hasInitialized() - { - return _initialized; - } -} diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/instancemanager/IdManager.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/instancemanager/IdManager.java new file mode 100644 index 0000000000..d595a5befa --- /dev/null +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/instancemanager/IdManager.java @@ -0,0 +1,322 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.instancemanager; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.BitSet; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Logger; + +import org.l2jmobius.Config; +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.commons.database.DatabaseFactory; +import org.l2jmobius.gameserver.util.PrimeFinder; + +/** + * @author Mobius (reworked from L2J IdFactory) + */ +public class IdManager +{ + private static final Logger LOGGER = Logger.getLogger(IdManager.class.getName()); + + //@formatter:off + private static final String[][] ID_EXTRACTS = + { + {"characters","charId"}, + {"items","object_id"}, + {"clan_data","clan_id"}, + {"itemsonground","object_id"}, + {"messages","messageId"} + }; + //@formatter:on + + private static final String[] TIMESTAMPS_CLEAN = + { + "DELETE FROM character_instance_time WHERE time <= ?", + "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" + }; + + private static final int FIRST_OID = 0x10000000; + private static final int LAST_OID = 0x7FFFFFFF; + private static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; + + private static BitSet _freeIds; + private static AtomicInteger _freeIdCount; + private static AtomicInteger _nextFreeId; + private static boolean _initialized; + + public IdManager() + { + // Update characters online status. + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + statement.executeUpdate("UPDATE characters SET online = 0"); + LOGGER.info("Updated characters online status."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not update characters online status: " + e); + } + + // Cleanup database. + if (Config.DATABASE_CLEAN_UP) + { + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + final long cleanupStart = System.currentTimeMillis(); + int cleanCount = 0; + + // Characters + cleanCount += statement.executeUpdate("DELETE FROM account_gsdata WHERE account_gsdata.account_name NOT IN (SELECT account_name FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.contactId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.friendId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_hennas WHERE character_hennas.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_macroses WHERE character_macroses.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_quests WHERE character_quests.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_recipebook WHERE character_recipebook.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_recipeshoplist WHERE character_recipeshoplist.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_shortcuts WHERE character_shortcuts.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_skills WHERE character_skills.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_skills_save WHERE character_skills_save.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_subclasses WHERE character_subclasses.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_instance_time WHERE character_instance_time.charId NOT IN (SELECT charId FROM characters);"); + + // Items + cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id NOT IN (SELECT charId FROM characters) AND items.owner_id NOT IN (SELECT clan_id FROM clan_data) AND items.owner_id != -1;"); + cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id = -1 AND loc LIKE 'MAIL' AND loc_data NOT IN (SELECT messageId FROM messages WHERE senderId = -1);"); + cleanCount += statement.executeUpdate("DELETE FROM item_auction_bid WHERE item_auction_bid.playerObjId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM item_variations WHERE item_variations.itemId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_elementals WHERE item_elementals.itemId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_special_abilities WHERE item_special_abilities.objectId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_variables WHERE item_variables.id NOT IN (SELECT object_id FROM items);"); + + // Misc + cleanCount += statement.executeUpdate("DELETE FROM cursed_weapons WHERE cursed_weapons.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM heroes WHERE heroes.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles WHERE olympiad_nobles.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles_eom WHERE olympiad_nobles_eom.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM pets WHERE pets.item_obj_id NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM merchant_lease WHERE merchant_lease.player_id NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_reco_bonus WHERE character_reco_bonus.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.leader_id NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.clan_id NOT IN (SELECT clanid FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charOneId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charTwoId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM heroes_diary WHERE heroes_diary.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade WHERE character_offline_trade.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade_items WHERE character_offline_trade_items.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_tpbookmark WHERE character_tpbookmark.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_variables WHERE character_variables.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM bot_reported_char_data WHERE bot_reported_char_data.botId NOT IN (SELECT charId FROM characters);"); + + // Clan + cleanCount += statement.executeUpdate("DELETE FROM clan_privs WHERE clan_privs.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_skills WHERE clan_skills.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_subpledges WHERE clan_subpledges.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan1 NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan2 NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM siege_clans WHERE siege_clans.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_notices WHERE clan_notices.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM auction_bid WHERE auction_bid.bidderId NOT IN (SELECT clan_id FROM clan_data);"); + + // Forums + cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT clan_id FROM clan_data) AND forums.forum_parent=2;"); + cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT charId FROM characters) AND forums.forum_parent=3;"); + cleanCount += statement.executeUpdate("DELETE FROM posts WHERE posts.post_forum_id NOT IN (SELECT forum_id FROM forums);"); + cleanCount += statement.executeUpdate("DELETE FROM topic WHERE topic.topic_forum_id NOT IN (SELECT forum_id FROM forums);"); + + // Update needed items after cleaning has taken place. + statement.executeUpdate("UPDATE clan_data SET auction_bid_at = 0 WHERE auction_bid_at NOT IN (SELECT auctionId FROM auction_bid);"); + statement.executeUpdate("UPDATE clan_data SET new_leader_id = 0 WHERE new_leader_id <> 0 AND new_leader_id NOT IN (SELECT charId FROM characters);"); + statement.executeUpdate("UPDATE clan_subpledges SET leader_id=0 WHERE clan_subpledges.leader_id NOT IN (SELECT charId FROM characters) AND leader_id > 0;"); + statement.executeUpdate("UPDATE castle SET side='NEUTRAL' WHERE castle.id NOT IN (SELECT hasCastle FROM clan_data);"); + statement.executeUpdate("UPDATE characters SET clanid=0, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0, clan_join_expiry_time=0, clan_create_expiry_time=0 WHERE characters.clanid > 0 AND characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); + statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); + + LOGGER.info("IdManager: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not clean up database: " + e); + } + } + + // Cleanup timestamps. + try (Connection con = DatabaseFactory.getConnection()) + { + int cleanCount = 0; + for (String line : TIMESTAMPS_CLEAN) + { + try (PreparedStatement statement = con.prepareStatement(line)) + { + statement.setLong(1, System.currentTimeMillis()); + cleanCount += statement.executeUpdate(); + } + } + LOGGER.info("IdManager: Cleaned " + cleanCount + " expired timestamps from database."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not clean expired timestamps from database. " + e); + } + + // Initialize. + try + { + _freeIds = new BitSet(PrimeFinder.nextPrime(100000)); + _freeIds.clear(); + _freeIdCount = new AtomicInteger(FREE_OBJECT_ID_SIZE); + + // Collect already used ids. + final List usedIds = new ArrayList<>(); + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + String extractUsedObjectIdsQuery = ""; + for (String[] tblClmn : ID_EXTRACTS) + { + extractUsedObjectIdsQuery += "SELECT " + tblClmn[1] + " FROM " + tblClmn[0] + " UNION "; + } + extractUsedObjectIdsQuery = extractUsedObjectIdsQuery.substring(0, extractUsedObjectIdsQuery.length() - 7); // Remove the last " UNION " + try (ResultSet result = statement.executeQuery(extractUsedObjectIdsQuery)) + { + while (result.next()) + { + usedIds.add(result.getInt(1)); + } + } + } + Collections.sort(usedIds); + + // Register used ids. + for (int usedObjectId : usedIds) + { + final int objectId = usedObjectId - FIRST_OID; + if (objectId < 0) + { + LOGGER.warning("IdManager: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); + continue; + } + _freeIds.set(usedObjectId - FIRST_OID); + _freeIdCount.decrementAndGet(); + } + + _nextFreeId = new AtomicInteger(_freeIds.nextClearBit(0)); + _initialized = true; + } + catch (Exception e) + { + _initialized = false; + LOGGER.severe("IdManager: Could not be initialized properly: " + e.getMessage()); + } + + // Schedule increase capacity task. + ThreadPool.scheduleAtFixedRate(() -> + { + synchronized (_nextFreeId) + { + if (PrimeFinder.nextPrime((usedIdCount() * 11) / 10) > _freeIds.size()) + { + increaseBitSetCapacity(); + } + } + }, 30000, 30000); + + LOGGER.info("IdManager: " + _freeIds.size() + " id's available."); + } + + public void releaseId(int objectId) + { + synchronized (_nextFreeId) + { + if ((objectId - FIRST_OID) > -1) + { + _freeIds.clear(objectId - FIRST_OID); + _freeIdCount.incrementAndGet(); + } + else + { + LOGGER.warning("IdManager: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); + } + } + } + + public int getNextId() + { + synchronized (_nextFreeId) + { + final int newId = _nextFreeId.get(); + _freeIds.set(newId); + _freeIdCount.decrementAndGet(); + + final int nextFree = _freeIds.nextClearBit(newId) < 0 ? _freeIds.nextClearBit(0) : _freeIds.nextClearBit(newId); + if (nextFree < 0) + { + if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) + { + throw new NullPointerException("IdManager: Ran out of valid ids."); + } + increaseBitSetCapacity(); + } + _nextFreeId.set(nextFree); + + return newId + FIRST_OID; + } + } + + private void increaseBitSetCapacity() + { + final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); + newBitSet.or(_freeIds); + _freeIds = newBitSet; + } + + private int usedIdCount() + { + return _freeIdCount.get() - FIRST_OID; + } + + public static int size() + { + return _freeIdCount.get(); + } + + public static boolean hasInitialized() + { + return _initialized; + } + + public static IdManager getInstance() + { + return SingletonHolder.INSTANCE; + } + + private static class SingletonHolder + { + protected static final IdManager INSTANCE = new IdManager(); + } +} diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/instancemanager/MailManager.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/instancemanager/MailManager.java index 176b407caa..2a82541b39 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/instancemanager/MailManager.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/instancemanager/MailManager.java @@ -31,7 +31,6 @@ import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.entity.Message; @@ -277,7 +276,7 @@ public class MailManager } _messages.remove(msgId); - IdFactory.releaseId(msgId); + IdManager.getInstance().releaseId(msgId); } /** diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/Petition.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/Petition.java index 0c1524f59b..b19b6f9025 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/Petition.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/Petition.java @@ -21,7 +21,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.PetitionState; import org.l2jmobius.gameserver.enums.PetitionType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.PetitionManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -47,7 +47,7 @@ public class Petition public Petition(PlayerInstance petitioner, String petitionText, int petitionType) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _type = PetitionType.values()[petitionType - 1]; _content = petitionText; _petitioner = petitioner; diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/WorldObject.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/WorldObject.java index 18e793a718..3b8f7fb5fb 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/WorldObject.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/WorldObject.java @@ -24,7 +24,7 @@ import org.l2jmobius.gameserver.handler.ActionHandler; import org.l2jmobius.gameserver.handler.ActionShiftHandler; import org.l2jmobius.gameserver.handler.IActionHandler; import org.l2jmobius.gameserver.handler.IActionShiftHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; @@ -154,8 +154,8 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif public void refreshId() { World.getInstance().removeObject(this); - IdFactory.releaseId(getObjectId()); - _objectId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(getObjectId()); + _objectId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Creature.java index e706a20968..56e4999036 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -63,7 +63,7 @@ import org.l2jmobius.gameserver.enums.Team; import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MapRegionManager; import org.l2jmobius.gameserver.instancemanager.QuestManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; @@ -288,7 +288,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public Creature(CreatureTemplate template) { - this(IdFactory.getNextId(), template); + this(IdManager.getInstance().getNextId(), template); } /** diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java index d132ad18fc..12209da801 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java @@ -20,7 +20,7 @@ import java.util.concurrent.Future; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.gameserver.enums.InstanceType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.stat.ControllableAirShipStat; import org.l2jmobius.gameserver.model.actor.templates.CreatureTemplate; import org.l2jmobius.gameserver.model.skills.AbnormalType; @@ -48,7 +48,7 @@ public class ControllableAirShipInstance extends AirShipInstance super(template); setInstanceType(InstanceType.ControllableAirShipInstance); _ownerId = ownerId; - _helmId = IdFactory.getNextId(); // not forget to release ! + _helmId = IdManager.getInstance().getNextId(); // not forget to release ! } @Override @@ -282,8 +282,8 @@ public class ControllableAirShipInstance extends AirShipInstance public void refreshId() { super.refreshId(); - IdFactory.releaseId(_helmId); - _helmId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(_helmId); + _helmId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java index 48c52c920f..c8412e68be 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.actor.instance; import org.l2jmobius.gameserver.data.xml.impl.FenceData; import org.l2jmobius.gameserver.enums.FenceState; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; @@ -44,7 +44,7 @@ public class FenceInstance extends WorldObject public FenceInstance(int x, int y, String name, int width, int length, int height, FenceState state) { - super(IdFactory.getNextId()); + super(IdManager.getInstance().getNextId()); _xMin = x - (width / 2); _xMax = x + (width / 2); @@ -59,7 +59,7 @@ public class FenceInstance extends WorldObject _heightFences = new int[height - 1]; for (int i = 0; i < _heightFences.length; i++) { - _heightFences[i] = IdFactory.getNextId(); + _heightFences[i] = IdManager.getInstance().getNextId(); } } } diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index d80c7751b6..17a2cac279 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -105,7 +105,6 @@ import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; import org.l2jmobius.gameserver.handler.IItemHandler; import org.l2jmobius.gameserver.handler.ItemHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CursedWeaponsManager; @@ -114,6 +113,7 @@ import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.HandysBlockCheckerManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager; import org.l2jmobius.gameserver.instancemanager.MentorManager; @@ -1140,7 +1140,7 @@ public class PlayerInstance extends Playable */ private PlayerInstance(PlayerTemplate template, String accountName, PlayerAppearance app) { - this(IdFactory.getNextId(), template, accountName, app); + this(IdManager.getInstance().getNextId(), template, accountName, app); } @Override diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java index 0564bbbe5e..b493b68bcc 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java @@ -21,7 +21,7 @@ import java.util.Locale; import org.l2jmobius.Config; import org.l2jmobius.commons.util.StringUtil; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.HistoryInfo; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.RaceState; @@ -160,7 +160,7 @@ public class RaceManagerInstance extends Npc player.setRace(0, 0); player.setRace(1, 0); - ItemInstance item = new ItemInstance(IdFactory.getNextId(), 4443); + ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 4443); item.setCount(1); item.setEnchantLevel(MonsterRace.getInstance().getRaceNumber()); item.setCustomType1(ticket); diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java index 6762897720..929d68a27f 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.announce; import java.util.Date; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.script.DateRange; /** @@ -32,7 +32,7 @@ public class EventAnnouncement implements IAnnouncement public EventAnnouncement(DateRange range, String content) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _range = range; _content = content; } @@ -88,7 +88,7 @@ public class EventAnnouncement implements IAnnouncement @Override public boolean deleteMe() { - IdFactory.releaseId(_id); + IdManager.getInstance().releaseId(_id); return true; } diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/entity/Couple.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/entity/Couple.java index 6897b8d681..54104ff7ab 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/entity/Couple.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/entity/Couple.java @@ -24,7 +24,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; /** @@ -85,7 +85,7 @@ public class Couple try (Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO mods_wedding (id, player1Id, player2Id, married, affianceDate, weddingDate) VALUES (?, ?, ?, ?, ?, ?)")) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); ps.setInt(1, _id); ps.setInt(2, _player1Id); ps.setInt(3, _player2Id); diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/entity/Message.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/entity/Message.java index 1b0ebe1d93..9002ebdc1a 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/entity/Message.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/entity/Message.java @@ -24,7 +24,7 @@ import java.sql.SQLException; import org.l2jmobius.gameserver.data.sql.impl.CharNameTable; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MailManager; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -99,7 +99,7 @@ public class Message */ public Message(int senderId, int receiverId, boolean isCod, String subject, String text, long reqAdena) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -118,7 +118,7 @@ public class Message */ public Message(int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = subject; @@ -138,7 +138,7 @@ public class Message */ public Message(int senderId, int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -157,7 +157,7 @@ public class Message */ public Message(Message msg) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = msg.getSenderId(); _receiverId = msg.getSenderId(); _subject = ""; @@ -177,7 +177,7 @@ public class Message public Message(int receiverId, ItemInstance item, MailType mailType) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = ""; diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java index e1e27e6111..800fb576c7 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java @@ -17,7 +17,7 @@ package org.l2jmobius.gameserver.model.itemauction; import org.l2jmobius.gameserver.datatables.ItemTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -78,7 +78,7 @@ public class AuctionItem public ItemInstance createNewItemInstance() { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), _itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), _itemId); World.getInstance().addObject(item); item.setCount(_itemCount); item.setEnchantLevel(item.getItem().getDefaultEnchantLevel()); diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 65b343278c..db7f1e7095 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -47,8 +47,8 @@ import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemSkillType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.CastleManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.SiegeGuardManager; import org.l2jmobius.gameserver.model.DropProtection; @@ -259,7 +259,7 @@ public class ItemInstance extends WorldObject */ public ItemInstance(int itemId) { - this(IdFactory.getNextId(), itemId); + this(IdManager.getInstance().getNextId(), itemId); } /** diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java index ee2437143a..7fa54aa75e 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java @@ -16,7 +16,7 @@ */ package org.l2jmobius.gameserver.model.zone; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -50,7 +50,7 @@ public abstract class ZoneForm protected final void dropDebugItem(int itemId, int num, int x, int y, int z) { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); item.setCount(num); item.spawnMe(x, y, z + 5); ZoneManager.getInstance().getDebugItems().add(item); diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/GameServer.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/GameServer.java index 7cdddb891e..f48b0fd94c 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/GameServer.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/GameServer.java @@ -105,7 +105,6 @@ import org.l2jmobius.gameserver.handler.ConditionHandler; import org.l2jmobius.gameserver.handler.DailyMissionHandler; import org.l2jmobius.gameserver.handler.EffectHandler; import org.l2jmobius.gameserver.handler.SkillConditionHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AirShipManager; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.BoatManager; @@ -122,6 +121,7 @@ import org.l2jmobius.gameserver.instancemanager.FakePlayerChatManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.GraciaSeedsManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.instancemanager.ItemAuctionManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; @@ -204,9 +204,9 @@ public class GameServer printSection("ThreadPool"); ThreadPool.init(); - printSection("IdFactory"); - IdFactory.init(); - if (!IdFactory.hasInitialized()) + printSection("IdManager"); + IdManager.getInstance(); + if (!IdManager.hasInitialized()) { LOGGER.severe(getClass().getSimpleName() + ": Could not read object IDs from database. Please check your configuration."); throw new Exception("Could not initialize the ID factory!"); @@ -420,7 +420,7 @@ public class GameServer Runtime.getRuntime().addShutdownHook(Shutdown.getInstance()); - LOGGER.info("IdFactory: Free ObjectID's remaining: " + IdFactory.size()); + LOGGER.info("IdManager: Free ObjectID's remaining: " + IdManager.size()); if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS) { diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java index 21cdff27ff..6fa1579a6d 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java @@ -35,10 +35,10 @@ import org.l2jmobius.gameserver.communitybbs.Manager.ForumsBBSManager; import org.l2jmobius.gameserver.data.xml.impl.ClanHallData; import org.l2jmobius.gameserver.enums.ClanWarState; import org.l2jmobius.gameserver.enums.UserInfoType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.ClanEntryManager; import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.SiegeManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -196,7 +196,7 @@ public class ClanTable return null; } - final Clan clan = new Clan(IdFactory.getNextId(), clanName); + final Clan clan = new Clan(IdManager.getInstance().getNextId(), clanName); final ClanMember leader = new ClanMember(clan, player); clan.setLeader(leader); leader.setPlayerInstance(player); @@ -271,7 +271,7 @@ public class ClanTable } _clans.remove(clanId); - IdFactory.releaseId(clanId); + IdManager.getInstance().releaseId(clanId); try (Connection con = DatabaseFactory.getConnection()) { diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/datatables/ItemTable.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/datatables/ItemTable.java index 319c8546fd..c3919e9365 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/datatables/ItemTable.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/datatables/ItemTable.java @@ -34,7 +34,7 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.data.xml.impl.EnchantItemHPBonusData; import org.l2jmobius.gameserver.engines.DocumentEngine; import org.l2jmobius.gameserver.enums.ItemLocation; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Attackable; @@ -210,7 +210,7 @@ public class ItemTable public ItemInstance createItem(String process, int itemId, long count, Creature actor, Object reference) { // Create and Init the ItemInstance corresponding to the Item Identifier - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); if (process.equalsIgnoreCase("loot") && !Config.AUTO_LOOT_ITEM_IDS.contains(itemId)) { ScheduledFuture itemLootShedule; @@ -328,7 +328,7 @@ public class ItemTable item.setLastChange(ItemInstance.REMOVED); World.getInstance().removeObject(item); - IdFactory.releaseId(item.getObjectId()); + IdManager.getInstance().releaseId(item.getObjectId()); if (Config.LOG_ITEMS) { diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/idfactory/IdFactory.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/idfactory/IdFactory.java deleted file mode 100644 index d4447a7dea..0000000000 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/idfactory/IdFactory.java +++ /dev/null @@ -1,337 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.l2jmobius.gameserver.idfactory; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.BitSet; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.logging.Logger; - -import org.l2jmobius.Config; -import org.l2jmobius.commons.concurrent.ThreadPool; -import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.util.PrimeFinder; - -/** - * @author Mobius (reworked from L2J version) - */ -public abstract class IdFactory -{ - private static final Logger LOGGER = Logger.getLogger(IdFactory.class.getName()); - - protected static final String[] ID_CHECKS = - { - "SELECT owner_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT object_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT charId FROM character_quests WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_contacts WHERE charId >= ? AND charId < ?", - "SELECT contactId FROM character_contacts WHERE contactId >= ? AND contactId < ?", - "SELECT charId FROM character_friends WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_friends WHERE friendId >= ? AND friendId < ?", - "SELECT charId FROM character_hennas WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipebook WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipeshoplist WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_shortcuts WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_macroses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills_save WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_subclasses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM characters WHERE charId >= ? AND charId < ?", - "SELECT clanid FROM characters WHERE clanid >= ? AND clanid < ?", - "SELECT clan_id FROM clan_data WHERE clan_id >= ? AND clan_id < ?", - "SELECT clan_id FROM siege_clans WHERE clan_id >= ? AND clan_id < ?", - "SELECT ally_id FROM clan_data WHERE ally_id >= ? AND ally_id < ?", - "SELECT leader_id FROM clan_data WHERE leader_id >= ? AND leader_id < ?", - "SELECT item_obj_id FROM pets WHERE item_obj_id >= ? AND item_obj_id < ?", - "SELECT object_id FROM itemsonground WHERE object_id >= ? AND object_id < ?", - "SELECT summonId FROM characters_summons WHERE summonId >= ? AND summonId < ?" - }; - //@formatter:off - private static final String[][] ID_EXTRACTS = - { - {"characters","charId"}, - {"items","object_id"}, - {"clan_data","clan_id"}, - {"itemsonground","object_id"}, - {"messages","messageId"} - }; - //@formatter:on - private static final String[] TIMESTAMPS_CLEAN = - { - "DELETE FROM character_instance_time WHERE time <= ?", - "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" - }; - public static final int FIRST_OID = 0x10000000; - public static final int LAST_OID = 0x7FFFFFFF; - public static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; - - private static BitSet _freeIds; - private static AtomicInteger _freeIdCount; - private static AtomicInteger _nextFreeId; - private static boolean _initialized; - - public static void init() - { - // Update characters online status. - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - statement.executeUpdate("UPDATE characters SET online = 0"); - LOGGER.info("Updated characters online status."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not update characters online status: " + e); - } - - // Cleanup database. - if (Config.DATABASE_CLEAN_UP) - { - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - final long cleanupStart = System.currentTimeMillis(); - int cleanCount = 0; - - // Characters - cleanCount += statement.executeUpdate("DELETE FROM account_gsdata WHERE account_gsdata.account_name NOT IN (SELECT account_name FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.contactId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.friendId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_hennas WHERE character_hennas.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_macroses WHERE character_macroses.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_quests WHERE character_quests.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_recipebook WHERE character_recipebook.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_recipeshoplist WHERE character_recipeshoplist.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_shortcuts WHERE character_shortcuts.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_skills WHERE character_skills.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_skills_save WHERE character_skills_save.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_subclasses WHERE character_subclasses.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_instance_time WHERE character_instance_time.charId NOT IN (SELECT charId FROM characters);"); - - // Items - cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id NOT IN (SELECT charId FROM characters) AND items.owner_id NOT IN (SELECT clan_id FROM clan_data) AND items.owner_id != -1;"); - cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id = -1 AND loc LIKE 'MAIL' AND loc_data NOT IN (SELECT messageId FROM messages WHERE senderId = -1);"); - cleanCount += statement.executeUpdate("DELETE FROM item_auction_bid WHERE item_auction_bid.playerObjId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM item_variations WHERE item_variations.itemId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_elementals WHERE item_elementals.itemId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_special_abilities WHERE item_special_abilities.objectId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_variables WHERE item_variables.id NOT IN (SELECT object_id FROM items);"); - - // Misc - cleanCount += statement.executeUpdate("DELETE FROM cursed_weapons WHERE cursed_weapons.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM heroes WHERE heroes.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles WHERE olympiad_nobles.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles_eom WHERE olympiad_nobles_eom.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM pets WHERE pets.item_obj_id NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM merchant_lease WHERE merchant_lease.player_id NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_reco_bonus WHERE character_reco_bonus.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.leader_id NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.clan_id NOT IN (SELECT clanid FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charOneId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charTwoId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM heroes_diary WHERE heroes_diary.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade WHERE character_offline_trade.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade_items WHERE character_offline_trade_items.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_tpbookmark WHERE character_tpbookmark.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_variables WHERE character_variables.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM bot_reported_char_data WHERE bot_reported_char_data.botId NOT IN (SELECT charId FROM characters);"); - - // Clan - cleanCount += statement.executeUpdate("DELETE FROM clan_privs WHERE clan_privs.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_skills WHERE clan_skills.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_subpledges WHERE clan_subpledges.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan1 NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan2 NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM siege_clans WHERE siege_clans.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_notices WHERE clan_notices.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM auction_bid WHERE auction_bid.bidderId NOT IN (SELECT clan_id FROM clan_data);"); - - // Forums - cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT clan_id FROM clan_data) AND forums.forum_parent=2;"); - cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT charId FROM characters) AND forums.forum_parent=3;"); - cleanCount += statement.executeUpdate("DELETE FROM posts WHERE posts.post_forum_id NOT IN (SELECT forum_id FROM forums);"); - cleanCount += statement.executeUpdate("DELETE FROM topic WHERE topic.topic_forum_id NOT IN (SELECT forum_id FROM forums);"); - - // Update needed items after cleaning has taken place. - statement.executeUpdate("UPDATE clan_data SET auction_bid_at = 0 WHERE auction_bid_at NOT IN (SELECT auctionId FROM auction_bid);"); - statement.executeUpdate("UPDATE clan_data SET new_leader_id = 0 WHERE new_leader_id <> 0 AND new_leader_id NOT IN (SELECT charId FROM characters);"); - statement.executeUpdate("UPDATE clan_subpledges SET leader_id=0 WHERE clan_subpledges.leader_id NOT IN (SELECT charId FROM characters) AND leader_id > 0;"); - statement.executeUpdate("UPDATE castle SET side='NEUTRAL' WHERE castle.id NOT IN (SELECT hasCastle FROM clan_data);"); - statement.executeUpdate("UPDATE characters SET clanid=0, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0, clan_join_expiry_time=0, clan_create_expiry_time=0 WHERE characters.clanid > 0 AND characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); - statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); - - LOGGER.info("IdFactory: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not clean up database: " + e); - } - } - - // Cleanup timestamps. - try (Connection con = DatabaseFactory.getConnection()) - { - int cleanCount = 0; - for (String line : TIMESTAMPS_CLEAN) - { - try (PreparedStatement statement = con.prepareStatement(line)) - { - statement.setLong(1, System.currentTimeMillis()); - cleanCount += statement.executeUpdate(); - } - } - LOGGER.info("IdFactory: Cleaned " + cleanCount + " expired timestamps from database."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not clean expired timestamps from database. " + e); - } - - // Initialize. - try - { - _freeIds = new BitSet(PrimeFinder.nextPrime(100000)); - _freeIds.clear(); - _freeIdCount = new AtomicInteger(FREE_OBJECT_ID_SIZE); - - // Collect already used ids. - final List usedIds = new ArrayList<>(); - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - String extractUsedObjectIdsQuery = ""; - for (String[] tblClmn : ID_EXTRACTS) - { - extractUsedObjectIdsQuery += "SELECT " + tblClmn[1] + " FROM " + tblClmn[0] + " UNION "; - } - extractUsedObjectIdsQuery = extractUsedObjectIdsQuery.substring(0, extractUsedObjectIdsQuery.length() - 7); // Remove the last " UNION " - try (ResultSet result = statement.executeQuery(extractUsedObjectIdsQuery)) - { - while (result.next()) - { - usedIds.add(result.getInt(1)); - } - } - } - Collections.sort(usedIds); - - // Register used ids. - for (int usedObjectId : usedIds) - { - final int objectId = usedObjectId - FIRST_OID; - if (objectId < 0) - { - LOGGER.warning("IdFactory: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); - continue; - } - _freeIds.set(usedObjectId - FIRST_OID); - _freeIdCount.decrementAndGet(); - } - - _nextFreeId = new AtomicInteger(_freeIds.nextClearBit(0)); - _initialized = true; - } - catch (Exception e) - { - _initialized = false; - LOGGER.severe("IdFactory: Could not be initialized properly: " + e.getMessage()); - } - - // Schedule increase capacity task. - ThreadPool.scheduleAtFixedRate(() -> - { - synchronized (_nextFreeId) - { - if (PrimeFinder.nextPrime((usedIdCount() * 11) / 10) > _freeIds.size()) - { - increaseBitSetCapacity(); - } - } - }, 30000, 30000); - - LOGGER.info("IdFactory: " + _freeIds.size() + " id's available."); - } - - public synchronized static void releaseId(int objectId) - { - synchronized (_nextFreeId) - { - if ((objectId - FIRST_OID) > -1) - { - _freeIds.clear(objectId - FIRST_OID); - _freeIdCount.incrementAndGet(); - } - else - { - LOGGER.warning("IdFactory: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); - } - } - } - - public synchronized static int getNextId() - { - synchronized (_nextFreeId) - { - final int newId = _nextFreeId.get(); - _freeIds.set(newId); - _freeIdCount.decrementAndGet(); - - final int nextFree = _freeIds.nextClearBit(newId) < 0 ? _freeIds.nextClearBit(0) : _freeIds.nextClearBit(newId); - if (nextFree < 0) - { - if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) - { - throw new NullPointerException("IdFactory: Ran out of valid ids."); - } - increaseBitSetCapacity(); - } - _nextFreeId.set(nextFree); - - return newId + FIRST_OID; - } - } - - private static void increaseBitSetCapacity() - { - final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); - newBitSet.or(_freeIds); - _freeIds = newBitSet; - } - - private static int usedIdCount() - { - return _freeIdCount.get() - FIRST_OID; - } - - public static int size() - { - return _freeIdCount.get(); - } - - public static boolean hasInitialized() - { - return _initialized; - } -} diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/instancemanager/IdManager.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/instancemanager/IdManager.java new file mode 100644 index 0000000000..d595a5befa --- /dev/null +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/instancemanager/IdManager.java @@ -0,0 +1,322 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.instancemanager; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.BitSet; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Logger; + +import org.l2jmobius.Config; +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.commons.database.DatabaseFactory; +import org.l2jmobius.gameserver.util.PrimeFinder; + +/** + * @author Mobius (reworked from L2J IdFactory) + */ +public class IdManager +{ + private static final Logger LOGGER = Logger.getLogger(IdManager.class.getName()); + + //@formatter:off + private static final String[][] ID_EXTRACTS = + { + {"characters","charId"}, + {"items","object_id"}, + {"clan_data","clan_id"}, + {"itemsonground","object_id"}, + {"messages","messageId"} + }; + //@formatter:on + + private static final String[] TIMESTAMPS_CLEAN = + { + "DELETE FROM character_instance_time WHERE time <= ?", + "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" + }; + + private static final int FIRST_OID = 0x10000000; + private static final int LAST_OID = 0x7FFFFFFF; + private static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; + + private static BitSet _freeIds; + private static AtomicInteger _freeIdCount; + private static AtomicInteger _nextFreeId; + private static boolean _initialized; + + public IdManager() + { + // Update characters online status. + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + statement.executeUpdate("UPDATE characters SET online = 0"); + LOGGER.info("Updated characters online status."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not update characters online status: " + e); + } + + // Cleanup database. + if (Config.DATABASE_CLEAN_UP) + { + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + final long cleanupStart = System.currentTimeMillis(); + int cleanCount = 0; + + // Characters + cleanCount += statement.executeUpdate("DELETE FROM account_gsdata WHERE account_gsdata.account_name NOT IN (SELECT account_name FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.contactId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.friendId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_hennas WHERE character_hennas.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_macroses WHERE character_macroses.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_quests WHERE character_quests.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_recipebook WHERE character_recipebook.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_recipeshoplist WHERE character_recipeshoplist.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_shortcuts WHERE character_shortcuts.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_skills WHERE character_skills.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_skills_save WHERE character_skills_save.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_subclasses WHERE character_subclasses.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_instance_time WHERE character_instance_time.charId NOT IN (SELECT charId FROM characters);"); + + // Items + cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id NOT IN (SELECT charId FROM characters) AND items.owner_id NOT IN (SELECT clan_id FROM clan_data) AND items.owner_id != -1;"); + cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id = -1 AND loc LIKE 'MAIL' AND loc_data NOT IN (SELECT messageId FROM messages WHERE senderId = -1);"); + cleanCount += statement.executeUpdate("DELETE FROM item_auction_bid WHERE item_auction_bid.playerObjId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM item_variations WHERE item_variations.itemId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_elementals WHERE item_elementals.itemId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_special_abilities WHERE item_special_abilities.objectId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_variables WHERE item_variables.id NOT IN (SELECT object_id FROM items);"); + + // Misc + cleanCount += statement.executeUpdate("DELETE FROM cursed_weapons WHERE cursed_weapons.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM heroes WHERE heroes.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles WHERE olympiad_nobles.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles_eom WHERE olympiad_nobles_eom.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM pets WHERE pets.item_obj_id NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM merchant_lease WHERE merchant_lease.player_id NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_reco_bonus WHERE character_reco_bonus.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.leader_id NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.clan_id NOT IN (SELECT clanid FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charOneId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charTwoId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM heroes_diary WHERE heroes_diary.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade WHERE character_offline_trade.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade_items WHERE character_offline_trade_items.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_tpbookmark WHERE character_tpbookmark.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_variables WHERE character_variables.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM bot_reported_char_data WHERE bot_reported_char_data.botId NOT IN (SELECT charId FROM characters);"); + + // Clan + cleanCount += statement.executeUpdate("DELETE FROM clan_privs WHERE clan_privs.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_skills WHERE clan_skills.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_subpledges WHERE clan_subpledges.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan1 NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan2 NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM siege_clans WHERE siege_clans.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_notices WHERE clan_notices.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM auction_bid WHERE auction_bid.bidderId NOT IN (SELECT clan_id FROM clan_data);"); + + // Forums + cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT clan_id FROM clan_data) AND forums.forum_parent=2;"); + cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT charId FROM characters) AND forums.forum_parent=3;"); + cleanCount += statement.executeUpdate("DELETE FROM posts WHERE posts.post_forum_id NOT IN (SELECT forum_id FROM forums);"); + cleanCount += statement.executeUpdate("DELETE FROM topic WHERE topic.topic_forum_id NOT IN (SELECT forum_id FROM forums);"); + + // Update needed items after cleaning has taken place. + statement.executeUpdate("UPDATE clan_data SET auction_bid_at = 0 WHERE auction_bid_at NOT IN (SELECT auctionId FROM auction_bid);"); + statement.executeUpdate("UPDATE clan_data SET new_leader_id = 0 WHERE new_leader_id <> 0 AND new_leader_id NOT IN (SELECT charId FROM characters);"); + statement.executeUpdate("UPDATE clan_subpledges SET leader_id=0 WHERE clan_subpledges.leader_id NOT IN (SELECT charId FROM characters) AND leader_id > 0;"); + statement.executeUpdate("UPDATE castle SET side='NEUTRAL' WHERE castle.id NOT IN (SELECT hasCastle FROM clan_data);"); + statement.executeUpdate("UPDATE characters SET clanid=0, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0, clan_join_expiry_time=0, clan_create_expiry_time=0 WHERE characters.clanid > 0 AND characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); + statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); + + LOGGER.info("IdManager: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not clean up database: " + e); + } + } + + // Cleanup timestamps. + try (Connection con = DatabaseFactory.getConnection()) + { + int cleanCount = 0; + for (String line : TIMESTAMPS_CLEAN) + { + try (PreparedStatement statement = con.prepareStatement(line)) + { + statement.setLong(1, System.currentTimeMillis()); + cleanCount += statement.executeUpdate(); + } + } + LOGGER.info("IdManager: Cleaned " + cleanCount + " expired timestamps from database."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not clean expired timestamps from database. " + e); + } + + // Initialize. + try + { + _freeIds = new BitSet(PrimeFinder.nextPrime(100000)); + _freeIds.clear(); + _freeIdCount = new AtomicInteger(FREE_OBJECT_ID_SIZE); + + // Collect already used ids. + final List usedIds = new ArrayList<>(); + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + String extractUsedObjectIdsQuery = ""; + for (String[] tblClmn : ID_EXTRACTS) + { + extractUsedObjectIdsQuery += "SELECT " + tblClmn[1] + " FROM " + tblClmn[0] + " UNION "; + } + extractUsedObjectIdsQuery = extractUsedObjectIdsQuery.substring(0, extractUsedObjectIdsQuery.length() - 7); // Remove the last " UNION " + try (ResultSet result = statement.executeQuery(extractUsedObjectIdsQuery)) + { + while (result.next()) + { + usedIds.add(result.getInt(1)); + } + } + } + Collections.sort(usedIds); + + // Register used ids. + for (int usedObjectId : usedIds) + { + final int objectId = usedObjectId - FIRST_OID; + if (objectId < 0) + { + LOGGER.warning("IdManager: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); + continue; + } + _freeIds.set(usedObjectId - FIRST_OID); + _freeIdCount.decrementAndGet(); + } + + _nextFreeId = new AtomicInteger(_freeIds.nextClearBit(0)); + _initialized = true; + } + catch (Exception e) + { + _initialized = false; + LOGGER.severe("IdManager: Could not be initialized properly: " + e.getMessage()); + } + + // Schedule increase capacity task. + ThreadPool.scheduleAtFixedRate(() -> + { + synchronized (_nextFreeId) + { + if (PrimeFinder.nextPrime((usedIdCount() * 11) / 10) > _freeIds.size()) + { + increaseBitSetCapacity(); + } + } + }, 30000, 30000); + + LOGGER.info("IdManager: " + _freeIds.size() + " id's available."); + } + + public void releaseId(int objectId) + { + synchronized (_nextFreeId) + { + if ((objectId - FIRST_OID) > -1) + { + _freeIds.clear(objectId - FIRST_OID); + _freeIdCount.incrementAndGet(); + } + else + { + LOGGER.warning("IdManager: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); + } + } + } + + public int getNextId() + { + synchronized (_nextFreeId) + { + final int newId = _nextFreeId.get(); + _freeIds.set(newId); + _freeIdCount.decrementAndGet(); + + final int nextFree = _freeIds.nextClearBit(newId) < 0 ? _freeIds.nextClearBit(0) : _freeIds.nextClearBit(newId); + if (nextFree < 0) + { + if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) + { + throw new NullPointerException("IdManager: Ran out of valid ids."); + } + increaseBitSetCapacity(); + } + _nextFreeId.set(nextFree); + + return newId + FIRST_OID; + } + } + + private void increaseBitSetCapacity() + { + final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); + newBitSet.or(_freeIds); + _freeIds = newBitSet; + } + + private int usedIdCount() + { + return _freeIdCount.get() - FIRST_OID; + } + + public static int size() + { + return _freeIdCount.get(); + } + + public static boolean hasInitialized() + { + return _initialized; + } + + public static IdManager getInstance() + { + return SingletonHolder.INSTANCE; + } + + private static class SingletonHolder + { + protected static final IdManager INSTANCE = new IdManager(); + } +} diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/instancemanager/MailManager.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/instancemanager/MailManager.java index 176b407caa..2a82541b39 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/instancemanager/MailManager.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/instancemanager/MailManager.java @@ -31,7 +31,6 @@ import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.entity.Message; @@ -277,7 +276,7 @@ public class MailManager } _messages.remove(msgId); - IdFactory.releaseId(msgId); + IdManager.getInstance().releaseId(msgId); } /** diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/Petition.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/Petition.java index 0c1524f59b..b19b6f9025 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/Petition.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/Petition.java @@ -21,7 +21,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.PetitionState; import org.l2jmobius.gameserver.enums.PetitionType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.PetitionManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -47,7 +47,7 @@ public class Petition public Petition(PlayerInstance petitioner, String petitionText, int petitionType) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _type = PetitionType.values()[petitionType - 1]; _content = petitionText; _petitioner = petitioner; diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/WorldObject.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/WorldObject.java index 18e793a718..3b8f7fb5fb 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/WorldObject.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/WorldObject.java @@ -24,7 +24,7 @@ import org.l2jmobius.gameserver.handler.ActionHandler; import org.l2jmobius.gameserver.handler.ActionShiftHandler; import org.l2jmobius.gameserver.handler.IActionHandler; import org.l2jmobius.gameserver.handler.IActionShiftHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; @@ -154,8 +154,8 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif public void refreshId() { World.getInstance().removeObject(this); - IdFactory.releaseId(getObjectId()); - _objectId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(getObjectId()); + _objectId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Creature.java index e68abb651a..114958df32 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -63,7 +63,7 @@ import org.l2jmobius.gameserver.enums.Team; import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MapRegionManager; import org.l2jmobius.gameserver.instancemanager.QuestManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; @@ -288,7 +288,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public Creature(CreatureTemplate template) { - this(IdFactory.getNextId(), template); + this(IdManager.getInstance().getNextId(), template); } /** diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java index d132ad18fc..12209da801 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java @@ -20,7 +20,7 @@ import java.util.concurrent.Future; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.gameserver.enums.InstanceType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.stat.ControllableAirShipStat; import org.l2jmobius.gameserver.model.actor.templates.CreatureTemplate; import org.l2jmobius.gameserver.model.skills.AbnormalType; @@ -48,7 +48,7 @@ public class ControllableAirShipInstance extends AirShipInstance super(template); setInstanceType(InstanceType.ControllableAirShipInstance); _ownerId = ownerId; - _helmId = IdFactory.getNextId(); // not forget to release ! + _helmId = IdManager.getInstance().getNextId(); // not forget to release ! } @Override @@ -282,8 +282,8 @@ public class ControllableAirShipInstance extends AirShipInstance public void refreshId() { super.refreshId(); - IdFactory.releaseId(_helmId); - _helmId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(_helmId); + _helmId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java index 48c52c920f..c8412e68be 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.actor.instance; import org.l2jmobius.gameserver.data.xml.impl.FenceData; import org.l2jmobius.gameserver.enums.FenceState; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; @@ -44,7 +44,7 @@ public class FenceInstance extends WorldObject public FenceInstance(int x, int y, String name, int width, int length, int height, FenceState state) { - super(IdFactory.getNextId()); + super(IdManager.getInstance().getNextId()); _xMin = x - (width / 2); _xMax = x + (width / 2); @@ -59,7 +59,7 @@ public class FenceInstance extends WorldObject _heightFences = new int[height - 1]; for (int i = 0; i < _heightFences.length; i++) { - _heightFences[i] = IdFactory.getNextId(); + _heightFences[i] = IdManager.getInstance().getNextId(); } } } diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 5457c0f809..5739a117b7 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -105,7 +105,6 @@ import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; import org.l2jmobius.gameserver.handler.IItemHandler; import org.l2jmobius.gameserver.handler.ItemHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CursedWeaponsManager; @@ -114,6 +113,7 @@ import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.HandysBlockCheckerManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager; import org.l2jmobius.gameserver.instancemanager.MentorManager; @@ -1138,7 +1138,7 @@ public class PlayerInstance extends Playable */ private PlayerInstance(PlayerTemplate template, String accountName, PlayerAppearance app) { - this(IdFactory.getNextId(), template, accountName, app); + this(IdManager.getInstance().getNextId(), template, accountName, app); } @Override diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java index 0564bbbe5e..b493b68bcc 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java @@ -21,7 +21,7 @@ import java.util.Locale; import org.l2jmobius.Config; import org.l2jmobius.commons.util.StringUtil; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.HistoryInfo; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.RaceState; @@ -160,7 +160,7 @@ public class RaceManagerInstance extends Npc player.setRace(0, 0); player.setRace(1, 0); - ItemInstance item = new ItemInstance(IdFactory.getNextId(), 4443); + ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 4443); item.setCount(1); item.setEnchantLevel(MonsterRace.getInstance().getRaceNumber()); item.setCustomType1(ticket); diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java index 6762897720..929d68a27f 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.announce; import java.util.Date; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.script.DateRange; /** @@ -32,7 +32,7 @@ public class EventAnnouncement implements IAnnouncement public EventAnnouncement(DateRange range, String content) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _range = range; _content = content; } @@ -88,7 +88,7 @@ public class EventAnnouncement implements IAnnouncement @Override public boolean deleteMe() { - IdFactory.releaseId(_id); + IdManager.getInstance().releaseId(_id); return true; } diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/entity/Couple.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/entity/Couple.java index 6897b8d681..54104ff7ab 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/entity/Couple.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/entity/Couple.java @@ -24,7 +24,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; /** @@ -85,7 +85,7 @@ public class Couple try (Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO mods_wedding (id, player1Id, player2Id, married, affianceDate, weddingDate) VALUES (?, ?, ?, ?, ?, ?)")) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); ps.setInt(1, _id); ps.setInt(2, _player1Id); ps.setInt(3, _player2Id); diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/entity/Message.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/entity/Message.java index 1b0ebe1d93..9002ebdc1a 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/entity/Message.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/entity/Message.java @@ -24,7 +24,7 @@ import java.sql.SQLException; import org.l2jmobius.gameserver.data.sql.impl.CharNameTable; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MailManager; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -99,7 +99,7 @@ public class Message */ public Message(int senderId, int receiverId, boolean isCod, String subject, String text, long reqAdena) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -118,7 +118,7 @@ public class Message */ public Message(int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = subject; @@ -138,7 +138,7 @@ public class Message */ public Message(int senderId, int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -157,7 +157,7 @@ public class Message */ public Message(Message msg) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = msg.getSenderId(); _receiverId = msg.getSenderId(); _subject = ""; @@ -177,7 +177,7 @@ public class Message public Message(int receiverId, ItemInstance item, MailType mailType) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = ""; diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java index e1e27e6111..800fb576c7 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java @@ -17,7 +17,7 @@ package org.l2jmobius.gameserver.model.itemauction; import org.l2jmobius.gameserver.datatables.ItemTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -78,7 +78,7 @@ public class AuctionItem public ItemInstance createNewItemInstance() { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), _itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), _itemId); World.getInstance().addObject(item); item.setCount(_itemCount); item.setEnchantLevel(item.getItem().getDefaultEnchantLevel()); diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 65b343278c..db7f1e7095 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -47,8 +47,8 @@ import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemSkillType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.CastleManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.SiegeGuardManager; import org.l2jmobius.gameserver.model.DropProtection; @@ -259,7 +259,7 @@ public class ItemInstance extends WorldObject */ public ItemInstance(int itemId) { - this(IdFactory.getNextId(), itemId); + this(IdManager.getInstance().getNextId(), itemId); } /** diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java index ee2437143a..7fa54aa75e 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java @@ -16,7 +16,7 @@ */ package org.l2jmobius.gameserver.model.zone; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -50,7 +50,7 @@ public abstract class ZoneForm protected final void dropDebugItem(int itemId, int num, int x, int y, int z) { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); item.setCount(num); item.spawnMe(x, y, z + 5); ZoneManager.getInstance().getDebugItems().add(item); diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/GameServer.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/GameServer.java index 36680edb4d..8f0050324c 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/GameServer.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/GameServer.java @@ -106,7 +106,6 @@ import org.l2jmobius.gameserver.handler.ConditionHandler; import org.l2jmobius.gameserver.handler.DailyMissionHandler; import org.l2jmobius.gameserver.handler.EffectHandler; import org.l2jmobius.gameserver.handler.SkillConditionHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AirShipManager; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.BoatManager; @@ -123,6 +122,7 @@ import org.l2jmobius.gameserver.instancemanager.FakePlayerChatManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.GraciaSeedsManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.instancemanager.ItemAuctionManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; @@ -205,9 +205,9 @@ public class GameServer printSection("ThreadPool"); ThreadPool.init(); - printSection("IdFactory"); - IdFactory.init(); - if (!IdFactory.hasInitialized()) + printSection("IdManager"); + IdManager.getInstance(); + if (!IdManager.hasInitialized()) { LOGGER.severe(getClass().getSimpleName() + ": Could not read object IDs from database. Please check your configuration."); throw new Exception("Could not initialize the ID factory!"); @@ -422,7 +422,7 @@ public class GameServer Runtime.getRuntime().addShutdownHook(Shutdown.getInstance()); - LOGGER.info("IdFactory: Free ObjectID's remaining: " + IdFactory.size()); + LOGGER.info("IdManager: Free ObjectID's remaining: " + IdManager.size()); if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS) { diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java index 21cdff27ff..6fa1579a6d 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java @@ -35,10 +35,10 @@ import org.l2jmobius.gameserver.communitybbs.Manager.ForumsBBSManager; import org.l2jmobius.gameserver.data.xml.impl.ClanHallData; import org.l2jmobius.gameserver.enums.ClanWarState; import org.l2jmobius.gameserver.enums.UserInfoType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.ClanEntryManager; import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.SiegeManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -196,7 +196,7 @@ public class ClanTable return null; } - final Clan clan = new Clan(IdFactory.getNextId(), clanName); + final Clan clan = new Clan(IdManager.getInstance().getNextId(), clanName); final ClanMember leader = new ClanMember(clan, player); clan.setLeader(leader); leader.setPlayerInstance(player); @@ -271,7 +271,7 @@ public class ClanTable } _clans.remove(clanId); - IdFactory.releaseId(clanId); + IdManager.getInstance().releaseId(clanId); try (Connection con = DatabaseFactory.getConnection()) { diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/datatables/ItemTable.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/datatables/ItemTable.java index ffbc08a6d9..da12c37a86 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/datatables/ItemTable.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/datatables/ItemTable.java @@ -34,7 +34,7 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.data.xml.impl.EnchantItemHPBonusData; import org.l2jmobius.gameserver.engines.DocumentEngine; import org.l2jmobius.gameserver.enums.ItemLocation; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Attackable; @@ -212,7 +212,7 @@ public class ItemTable public ItemInstance createItem(String process, int itemId, long count, Creature actor, Object reference) { // Create and Init the ItemInstance corresponding to the Item Identifier - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); if (process.equalsIgnoreCase("loot") && !Config.AUTO_LOOT_ITEM_IDS.contains(itemId)) { ScheduledFuture itemLootShedule; @@ -330,7 +330,7 @@ public class ItemTable item.setLastChange(ItemInstance.REMOVED); World.getInstance().removeObject(item); - IdFactory.releaseId(item.getObjectId()); + IdManager.getInstance().releaseId(item.getObjectId()); if (Config.LOG_ITEMS) { diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/idfactory/IdFactory.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/idfactory/IdFactory.java deleted file mode 100644 index d4447a7dea..0000000000 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/idfactory/IdFactory.java +++ /dev/null @@ -1,337 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.l2jmobius.gameserver.idfactory; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.BitSet; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.logging.Logger; - -import org.l2jmobius.Config; -import org.l2jmobius.commons.concurrent.ThreadPool; -import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.util.PrimeFinder; - -/** - * @author Mobius (reworked from L2J version) - */ -public abstract class IdFactory -{ - private static final Logger LOGGER = Logger.getLogger(IdFactory.class.getName()); - - protected static final String[] ID_CHECKS = - { - "SELECT owner_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT object_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT charId FROM character_quests WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_contacts WHERE charId >= ? AND charId < ?", - "SELECT contactId FROM character_contacts WHERE contactId >= ? AND contactId < ?", - "SELECT charId FROM character_friends WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_friends WHERE friendId >= ? AND friendId < ?", - "SELECT charId FROM character_hennas WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipebook WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipeshoplist WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_shortcuts WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_macroses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills_save WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_subclasses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM characters WHERE charId >= ? AND charId < ?", - "SELECT clanid FROM characters WHERE clanid >= ? AND clanid < ?", - "SELECT clan_id FROM clan_data WHERE clan_id >= ? AND clan_id < ?", - "SELECT clan_id FROM siege_clans WHERE clan_id >= ? AND clan_id < ?", - "SELECT ally_id FROM clan_data WHERE ally_id >= ? AND ally_id < ?", - "SELECT leader_id FROM clan_data WHERE leader_id >= ? AND leader_id < ?", - "SELECT item_obj_id FROM pets WHERE item_obj_id >= ? AND item_obj_id < ?", - "SELECT object_id FROM itemsonground WHERE object_id >= ? AND object_id < ?", - "SELECT summonId FROM characters_summons WHERE summonId >= ? AND summonId < ?" - }; - //@formatter:off - private static final String[][] ID_EXTRACTS = - { - {"characters","charId"}, - {"items","object_id"}, - {"clan_data","clan_id"}, - {"itemsonground","object_id"}, - {"messages","messageId"} - }; - //@formatter:on - private static final String[] TIMESTAMPS_CLEAN = - { - "DELETE FROM character_instance_time WHERE time <= ?", - "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" - }; - public static final int FIRST_OID = 0x10000000; - public static final int LAST_OID = 0x7FFFFFFF; - public static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; - - private static BitSet _freeIds; - private static AtomicInteger _freeIdCount; - private static AtomicInteger _nextFreeId; - private static boolean _initialized; - - public static void init() - { - // Update characters online status. - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - statement.executeUpdate("UPDATE characters SET online = 0"); - LOGGER.info("Updated characters online status."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not update characters online status: " + e); - } - - // Cleanup database. - if (Config.DATABASE_CLEAN_UP) - { - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - final long cleanupStart = System.currentTimeMillis(); - int cleanCount = 0; - - // Characters - cleanCount += statement.executeUpdate("DELETE FROM account_gsdata WHERE account_gsdata.account_name NOT IN (SELECT account_name FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.contactId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.friendId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_hennas WHERE character_hennas.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_macroses WHERE character_macroses.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_quests WHERE character_quests.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_recipebook WHERE character_recipebook.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_recipeshoplist WHERE character_recipeshoplist.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_shortcuts WHERE character_shortcuts.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_skills WHERE character_skills.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_skills_save WHERE character_skills_save.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_subclasses WHERE character_subclasses.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_instance_time WHERE character_instance_time.charId NOT IN (SELECT charId FROM characters);"); - - // Items - cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id NOT IN (SELECT charId FROM characters) AND items.owner_id NOT IN (SELECT clan_id FROM clan_data) AND items.owner_id != -1;"); - cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id = -1 AND loc LIKE 'MAIL' AND loc_data NOT IN (SELECT messageId FROM messages WHERE senderId = -1);"); - cleanCount += statement.executeUpdate("DELETE FROM item_auction_bid WHERE item_auction_bid.playerObjId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM item_variations WHERE item_variations.itemId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_elementals WHERE item_elementals.itemId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_special_abilities WHERE item_special_abilities.objectId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_variables WHERE item_variables.id NOT IN (SELECT object_id FROM items);"); - - // Misc - cleanCount += statement.executeUpdate("DELETE FROM cursed_weapons WHERE cursed_weapons.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM heroes WHERE heroes.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles WHERE olympiad_nobles.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles_eom WHERE olympiad_nobles_eom.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM pets WHERE pets.item_obj_id NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM merchant_lease WHERE merchant_lease.player_id NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_reco_bonus WHERE character_reco_bonus.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.leader_id NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.clan_id NOT IN (SELECT clanid FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charOneId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charTwoId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM heroes_diary WHERE heroes_diary.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade WHERE character_offline_trade.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade_items WHERE character_offline_trade_items.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_tpbookmark WHERE character_tpbookmark.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_variables WHERE character_variables.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM bot_reported_char_data WHERE bot_reported_char_data.botId NOT IN (SELECT charId FROM characters);"); - - // Clan - cleanCount += statement.executeUpdate("DELETE FROM clan_privs WHERE clan_privs.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_skills WHERE clan_skills.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_subpledges WHERE clan_subpledges.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan1 NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan2 NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM siege_clans WHERE siege_clans.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_notices WHERE clan_notices.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM auction_bid WHERE auction_bid.bidderId NOT IN (SELECT clan_id FROM clan_data);"); - - // Forums - cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT clan_id FROM clan_data) AND forums.forum_parent=2;"); - cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT charId FROM characters) AND forums.forum_parent=3;"); - cleanCount += statement.executeUpdate("DELETE FROM posts WHERE posts.post_forum_id NOT IN (SELECT forum_id FROM forums);"); - cleanCount += statement.executeUpdate("DELETE FROM topic WHERE topic.topic_forum_id NOT IN (SELECT forum_id FROM forums);"); - - // Update needed items after cleaning has taken place. - statement.executeUpdate("UPDATE clan_data SET auction_bid_at = 0 WHERE auction_bid_at NOT IN (SELECT auctionId FROM auction_bid);"); - statement.executeUpdate("UPDATE clan_data SET new_leader_id = 0 WHERE new_leader_id <> 0 AND new_leader_id NOT IN (SELECT charId FROM characters);"); - statement.executeUpdate("UPDATE clan_subpledges SET leader_id=0 WHERE clan_subpledges.leader_id NOT IN (SELECT charId FROM characters) AND leader_id > 0;"); - statement.executeUpdate("UPDATE castle SET side='NEUTRAL' WHERE castle.id NOT IN (SELECT hasCastle FROM clan_data);"); - statement.executeUpdate("UPDATE characters SET clanid=0, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0, clan_join_expiry_time=0, clan_create_expiry_time=0 WHERE characters.clanid > 0 AND characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); - statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); - - LOGGER.info("IdFactory: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not clean up database: " + e); - } - } - - // Cleanup timestamps. - try (Connection con = DatabaseFactory.getConnection()) - { - int cleanCount = 0; - for (String line : TIMESTAMPS_CLEAN) - { - try (PreparedStatement statement = con.prepareStatement(line)) - { - statement.setLong(1, System.currentTimeMillis()); - cleanCount += statement.executeUpdate(); - } - } - LOGGER.info("IdFactory: Cleaned " + cleanCount + " expired timestamps from database."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not clean expired timestamps from database. " + e); - } - - // Initialize. - try - { - _freeIds = new BitSet(PrimeFinder.nextPrime(100000)); - _freeIds.clear(); - _freeIdCount = new AtomicInteger(FREE_OBJECT_ID_SIZE); - - // Collect already used ids. - final List usedIds = new ArrayList<>(); - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - String extractUsedObjectIdsQuery = ""; - for (String[] tblClmn : ID_EXTRACTS) - { - extractUsedObjectIdsQuery += "SELECT " + tblClmn[1] + " FROM " + tblClmn[0] + " UNION "; - } - extractUsedObjectIdsQuery = extractUsedObjectIdsQuery.substring(0, extractUsedObjectIdsQuery.length() - 7); // Remove the last " UNION " - try (ResultSet result = statement.executeQuery(extractUsedObjectIdsQuery)) - { - while (result.next()) - { - usedIds.add(result.getInt(1)); - } - } - } - Collections.sort(usedIds); - - // Register used ids. - for (int usedObjectId : usedIds) - { - final int objectId = usedObjectId - FIRST_OID; - if (objectId < 0) - { - LOGGER.warning("IdFactory: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); - continue; - } - _freeIds.set(usedObjectId - FIRST_OID); - _freeIdCount.decrementAndGet(); - } - - _nextFreeId = new AtomicInteger(_freeIds.nextClearBit(0)); - _initialized = true; - } - catch (Exception e) - { - _initialized = false; - LOGGER.severe("IdFactory: Could not be initialized properly: " + e.getMessage()); - } - - // Schedule increase capacity task. - ThreadPool.scheduleAtFixedRate(() -> - { - synchronized (_nextFreeId) - { - if (PrimeFinder.nextPrime((usedIdCount() * 11) / 10) > _freeIds.size()) - { - increaseBitSetCapacity(); - } - } - }, 30000, 30000); - - LOGGER.info("IdFactory: " + _freeIds.size() + " id's available."); - } - - public synchronized static void releaseId(int objectId) - { - synchronized (_nextFreeId) - { - if ((objectId - FIRST_OID) > -1) - { - _freeIds.clear(objectId - FIRST_OID); - _freeIdCount.incrementAndGet(); - } - else - { - LOGGER.warning("IdFactory: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); - } - } - } - - public synchronized static int getNextId() - { - synchronized (_nextFreeId) - { - final int newId = _nextFreeId.get(); - _freeIds.set(newId); - _freeIdCount.decrementAndGet(); - - final int nextFree = _freeIds.nextClearBit(newId) < 0 ? _freeIds.nextClearBit(0) : _freeIds.nextClearBit(newId); - if (nextFree < 0) - { - if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) - { - throw new NullPointerException("IdFactory: Ran out of valid ids."); - } - increaseBitSetCapacity(); - } - _nextFreeId.set(nextFree); - - return newId + FIRST_OID; - } - } - - private static void increaseBitSetCapacity() - { - final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); - newBitSet.or(_freeIds); - _freeIds = newBitSet; - } - - private static int usedIdCount() - { - return _freeIdCount.get() - FIRST_OID; - } - - public static int size() - { - return _freeIdCount.get(); - } - - public static boolean hasInitialized() - { - return _initialized; - } -} diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/instancemanager/IdManager.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/instancemanager/IdManager.java new file mode 100644 index 0000000000..d595a5befa --- /dev/null +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/instancemanager/IdManager.java @@ -0,0 +1,322 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.instancemanager; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.BitSet; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Logger; + +import org.l2jmobius.Config; +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.commons.database.DatabaseFactory; +import org.l2jmobius.gameserver.util.PrimeFinder; + +/** + * @author Mobius (reworked from L2J IdFactory) + */ +public class IdManager +{ + private static final Logger LOGGER = Logger.getLogger(IdManager.class.getName()); + + //@formatter:off + private static final String[][] ID_EXTRACTS = + { + {"characters","charId"}, + {"items","object_id"}, + {"clan_data","clan_id"}, + {"itemsonground","object_id"}, + {"messages","messageId"} + }; + //@formatter:on + + private static final String[] TIMESTAMPS_CLEAN = + { + "DELETE FROM character_instance_time WHERE time <= ?", + "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" + }; + + private static final int FIRST_OID = 0x10000000; + private static final int LAST_OID = 0x7FFFFFFF; + private static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; + + private static BitSet _freeIds; + private static AtomicInteger _freeIdCount; + private static AtomicInteger _nextFreeId; + private static boolean _initialized; + + public IdManager() + { + // Update characters online status. + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + statement.executeUpdate("UPDATE characters SET online = 0"); + LOGGER.info("Updated characters online status."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not update characters online status: " + e); + } + + // Cleanup database. + if (Config.DATABASE_CLEAN_UP) + { + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + final long cleanupStart = System.currentTimeMillis(); + int cleanCount = 0; + + // Characters + cleanCount += statement.executeUpdate("DELETE FROM account_gsdata WHERE account_gsdata.account_name NOT IN (SELECT account_name FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.contactId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.friendId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_hennas WHERE character_hennas.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_macroses WHERE character_macroses.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_quests WHERE character_quests.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_recipebook WHERE character_recipebook.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_recipeshoplist WHERE character_recipeshoplist.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_shortcuts WHERE character_shortcuts.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_skills WHERE character_skills.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_skills_save WHERE character_skills_save.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_subclasses WHERE character_subclasses.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_instance_time WHERE character_instance_time.charId NOT IN (SELECT charId FROM characters);"); + + // Items + cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id NOT IN (SELECT charId FROM characters) AND items.owner_id NOT IN (SELECT clan_id FROM clan_data) AND items.owner_id != -1;"); + cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id = -1 AND loc LIKE 'MAIL' AND loc_data NOT IN (SELECT messageId FROM messages WHERE senderId = -1);"); + cleanCount += statement.executeUpdate("DELETE FROM item_auction_bid WHERE item_auction_bid.playerObjId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM item_variations WHERE item_variations.itemId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_elementals WHERE item_elementals.itemId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_special_abilities WHERE item_special_abilities.objectId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_variables WHERE item_variables.id NOT IN (SELECT object_id FROM items);"); + + // Misc + cleanCount += statement.executeUpdate("DELETE FROM cursed_weapons WHERE cursed_weapons.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM heroes WHERE heroes.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles WHERE olympiad_nobles.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles_eom WHERE olympiad_nobles_eom.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM pets WHERE pets.item_obj_id NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM merchant_lease WHERE merchant_lease.player_id NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_reco_bonus WHERE character_reco_bonus.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.leader_id NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.clan_id NOT IN (SELECT clanid FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charOneId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charTwoId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM heroes_diary WHERE heroes_diary.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade WHERE character_offline_trade.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade_items WHERE character_offline_trade_items.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_tpbookmark WHERE character_tpbookmark.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_variables WHERE character_variables.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM bot_reported_char_data WHERE bot_reported_char_data.botId NOT IN (SELECT charId FROM characters);"); + + // Clan + cleanCount += statement.executeUpdate("DELETE FROM clan_privs WHERE clan_privs.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_skills WHERE clan_skills.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_subpledges WHERE clan_subpledges.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan1 NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan2 NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM siege_clans WHERE siege_clans.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_notices WHERE clan_notices.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM auction_bid WHERE auction_bid.bidderId NOT IN (SELECT clan_id FROM clan_data);"); + + // Forums + cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT clan_id FROM clan_data) AND forums.forum_parent=2;"); + cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT charId FROM characters) AND forums.forum_parent=3;"); + cleanCount += statement.executeUpdate("DELETE FROM posts WHERE posts.post_forum_id NOT IN (SELECT forum_id FROM forums);"); + cleanCount += statement.executeUpdate("DELETE FROM topic WHERE topic.topic_forum_id NOT IN (SELECT forum_id FROM forums);"); + + // Update needed items after cleaning has taken place. + statement.executeUpdate("UPDATE clan_data SET auction_bid_at = 0 WHERE auction_bid_at NOT IN (SELECT auctionId FROM auction_bid);"); + statement.executeUpdate("UPDATE clan_data SET new_leader_id = 0 WHERE new_leader_id <> 0 AND new_leader_id NOT IN (SELECT charId FROM characters);"); + statement.executeUpdate("UPDATE clan_subpledges SET leader_id=0 WHERE clan_subpledges.leader_id NOT IN (SELECT charId FROM characters) AND leader_id > 0;"); + statement.executeUpdate("UPDATE castle SET side='NEUTRAL' WHERE castle.id NOT IN (SELECT hasCastle FROM clan_data);"); + statement.executeUpdate("UPDATE characters SET clanid=0, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0, clan_join_expiry_time=0, clan_create_expiry_time=0 WHERE characters.clanid > 0 AND characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); + statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); + + LOGGER.info("IdManager: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not clean up database: " + e); + } + } + + // Cleanup timestamps. + try (Connection con = DatabaseFactory.getConnection()) + { + int cleanCount = 0; + for (String line : TIMESTAMPS_CLEAN) + { + try (PreparedStatement statement = con.prepareStatement(line)) + { + statement.setLong(1, System.currentTimeMillis()); + cleanCount += statement.executeUpdate(); + } + } + LOGGER.info("IdManager: Cleaned " + cleanCount + " expired timestamps from database."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not clean expired timestamps from database. " + e); + } + + // Initialize. + try + { + _freeIds = new BitSet(PrimeFinder.nextPrime(100000)); + _freeIds.clear(); + _freeIdCount = new AtomicInteger(FREE_OBJECT_ID_SIZE); + + // Collect already used ids. + final List usedIds = new ArrayList<>(); + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + String extractUsedObjectIdsQuery = ""; + for (String[] tblClmn : ID_EXTRACTS) + { + extractUsedObjectIdsQuery += "SELECT " + tblClmn[1] + " FROM " + tblClmn[0] + " UNION "; + } + extractUsedObjectIdsQuery = extractUsedObjectIdsQuery.substring(0, extractUsedObjectIdsQuery.length() - 7); // Remove the last " UNION " + try (ResultSet result = statement.executeQuery(extractUsedObjectIdsQuery)) + { + while (result.next()) + { + usedIds.add(result.getInt(1)); + } + } + } + Collections.sort(usedIds); + + // Register used ids. + for (int usedObjectId : usedIds) + { + final int objectId = usedObjectId - FIRST_OID; + if (objectId < 0) + { + LOGGER.warning("IdManager: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); + continue; + } + _freeIds.set(usedObjectId - FIRST_OID); + _freeIdCount.decrementAndGet(); + } + + _nextFreeId = new AtomicInteger(_freeIds.nextClearBit(0)); + _initialized = true; + } + catch (Exception e) + { + _initialized = false; + LOGGER.severe("IdManager: Could not be initialized properly: " + e.getMessage()); + } + + // Schedule increase capacity task. + ThreadPool.scheduleAtFixedRate(() -> + { + synchronized (_nextFreeId) + { + if (PrimeFinder.nextPrime((usedIdCount() * 11) / 10) > _freeIds.size()) + { + increaseBitSetCapacity(); + } + } + }, 30000, 30000); + + LOGGER.info("IdManager: " + _freeIds.size() + " id's available."); + } + + public void releaseId(int objectId) + { + synchronized (_nextFreeId) + { + if ((objectId - FIRST_OID) > -1) + { + _freeIds.clear(objectId - FIRST_OID); + _freeIdCount.incrementAndGet(); + } + else + { + LOGGER.warning("IdManager: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); + } + } + } + + public int getNextId() + { + synchronized (_nextFreeId) + { + final int newId = _nextFreeId.get(); + _freeIds.set(newId); + _freeIdCount.decrementAndGet(); + + final int nextFree = _freeIds.nextClearBit(newId) < 0 ? _freeIds.nextClearBit(0) : _freeIds.nextClearBit(newId); + if (nextFree < 0) + { + if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) + { + throw new NullPointerException("IdManager: Ran out of valid ids."); + } + increaseBitSetCapacity(); + } + _nextFreeId.set(nextFree); + + return newId + FIRST_OID; + } + } + + private void increaseBitSetCapacity() + { + final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); + newBitSet.or(_freeIds); + _freeIds = newBitSet; + } + + private int usedIdCount() + { + return _freeIdCount.get() - FIRST_OID; + } + + public static int size() + { + return _freeIdCount.get(); + } + + public static boolean hasInitialized() + { + return _initialized; + } + + public static IdManager getInstance() + { + return SingletonHolder.INSTANCE; + } + + private static class SingletonHolder + { + protected static final IdManager INSTANCE = new IdManager(); + } +} diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/instancemanager/MailManager.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/instancemanager/MailManager.java index 176b407caa..2a82541b39 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/instancemanager/MailManager.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/instancemanager/MailManager.java @@ -31,7 +31,6 @@ import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.entity.Message; @@ -277,7 +276,7 @@ public class MailManager } _messages.remove(msgId); - IdFactory.releaseId(msgId); + IdManager.getInstance().releaseId(msgId); } /** diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/Petition.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/Petition.java index 0c1524f59b..b19b6f9025 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/Petition.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/Petition.java @@ -21,7 +21,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.PetitionState; import org.l2jmobius.gameserver.enums.PetitionType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.PetitionManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -47,7 +47,7 @@ public class Petition public Petition(PlayerInstance petitioner, String petitionText, int petitionType) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _type = PetitionType.values()[petitionType - 1]; _content = petitionText; _petitioner = petitioner; diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/WorldObject.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/WorldObject.java index 18e793a718..3b8f7fb5fb 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/WorldObject.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/WorldObject.java @@ -24,7 +24,7 @@ import org.l2jmobius.gameserver.handler.ActionHandler; import org.l2jmobius.gameserver.handler.ActionShiftHandler; import org.l2jmobius.gameserver.handler.IActionHandler; import org.l2jmobius.gameserver.handler.IActionShiftHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; @@ -154,8 +154,8 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif public void refreshId() { World.getInstance().removeObject(this); - IdFactory.releaseId(getObjectId()); - _objectId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(getObjectId()); + _objectId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java index f1f6aeef1d..d6104e785e 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -64,7 +64,7 @@ import org.l2jmobius.gameserver.enums.Team; import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MapRegionManager; import org.l2jmobius.gameserver.instancemanager.QuestManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; @@ -289,7 +289,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public Creature(CreatureTemplate template) { - this(IdFactory.getNextId(), template); + this(IdManager.getInstance().getNextId(), template); } /** diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java index d132ad18fc..12209da801 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java @@ -20,7 +20,7 @@ import java.util.concurrent.Future; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.gameserver.enums.InstanceType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.stat.ControllableAirShipStat; import org.l2jmobius.gameserver.model.actor.templates.CreatureTemplate; import org.l2jmobius.gameserver.model.skills.AbnormalType; @@ -48,7 +48,7 @@ public class ControllableAirShipInstance extends AirShipInstance super(template); setInstanceType(InstanceType.ControllableAirShipInstance); _ownerId = ownerId; - _helmId = IdFactory.getNextId(); // not forget to release ! + _helmId = IdManager.getInstance().getNextId(); // not forget to release ! } @Override @@ -282,8 +282,8 @@ public class ControllableAirShipInstance extends AirShipInstance public void refreshId() { super.refreshId(); - IdFactory.releaseId(_helmId); - _helmId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(_helmId); + _helmId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java index 48c52c920f..c8412e68be 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.actor.instance; import org.l2jmobius.gameserver.data.xml.impl.FenceData; import org.l2jmobius.gameserver.enums.FenceState; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; @@ -44,7 +44,7 @@ public class FenceInstance extends WorldObject public FenceInstance(int x, int y, String name, int width, int length, int height, FenceState state) { - super(IdFactory.getNextId()); + super(IdManager.getInstance().getNextId()); _xMin = x - (width / 2); _xMax = x + (width / 2); @@ -59,7 +59,7 @@ public class FenceInstance extends WorldObject _heightFences = new int[height - 1]; for (int i = 0; i < _heightFences.length; i++) { - _heightFences[i] = IdFactory.getNextId(); + _heightFences[i] = IdManager.getInstance().getNextId(); } } } diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 86921ea902..1833a23a90 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -107,7 +107,6 @@ import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; import org.l2jmobius.gameserver.handler.IItemHandler; import org.l2jmobius.gameserver.handler.ItemHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CursedWeaponsManager; @@ -116,6 +115,7 @@ import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.HandysBlockCheckerManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager; import org.l2jmobius.gameserver.instancemanager.MentorManager; @@ -1148,7 +1148,7 @@ public class PlayerInstance extends Playable */ private PlayerInstance(PlayerTemplate template, String accountName, PlayerAppearance app) { - this(IdFactory.getNextId(), template, accountName, app); + this(IdManager.getInstance().getNextId(), template, accountName, app); } @Override diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java index 0564bbbe5e..b493b68bcc 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java @@ -21,7 +21,7 @@ import java.util.Locale; import org.l2jmobius.Config; import org.l2jmobius.commons.util.StringUtil; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.HistoryInfo; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.RaceState; @@ -160,7 +160,7 @@ public class RaceManagerInstance extends Npc player.setRace(0, 0); player.setRace(1, 0); - ItemInstance item = new ItemInstance(IdFactory.getNextId(), 4443); + ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 4443); item.setCount(1); item.setEnchantLevel(MonsterRace.getInstance().getRaceNumber()); item.setCustomType1(ticket); diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java index 6762897720..929d68a27f 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.announce; import java.util.Date; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.script.DateRange; /** @@ -32,7 +32,7 @@ public class EventAnnouncement implements IAnnouncement public EventAnnouncement(DateRange range, String content) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _range = range; _content = content; } @@ -88,7 +88,7 @@ public class EventAnnouncement implements IAnnouncement @Override public boolean deleteMe() { - IdFactory.releaseId(_id); + IdManager.getInstance().releaseId(_id); return true; } diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/entity/Couple.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/entity/Couple.java index 6897b8d681..54104ff7ab 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/entity/Couple.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/entity/Couple.java @@ -24,7 +24,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; /** @@ -85,7 +85,7 @@ public class Couple try (Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO mods_wedding (id, player1Id, player2Id, married, affianceDate, weddingDate) VALUES (?, ?, ?, ?, ?, ?)")) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); ps.setInt(1, _id); ps.setInt(2, _player1Id); ps.setInt(3, _player2Id); diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/entity/Message.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/entity/Message.java index 1b0ebe1d93..9002ebdc1a 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/entity/Message.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/entity/Message.java @@ -24,7 +24,7 @@ import java.sql.SQLException; import org.l2jmobius.gameserver.data.sql.impl.CharNameTable; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MailManager; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -99,7 +99,7 @@ public class Message */ public Message(int senderId, int receiverId, boolean isCod, String subject, String text, long reqAdena) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -118,7 +118,7 @@ public class Message */ public Message(int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = subject; @@ -138,7 +138,7 @@ public class Message */ public Message(int senderId, int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -157,7 +157,7 @@ public class Message */ public Message(Message msg) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = msg.getSenderId(); _receiverId = msg.getSenderId(); _subject = ""; @@ -177,7 +177,7 @@ public class Message public Message(int receiverId, ItemInstance item, MailType mailType) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = ""; diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java index e1e27e6111..800fb576c7 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java @@ -17,7 +17,7 @@ package org.l2jmobius.gameserver.model.itemauction; import org.l2jmobius.gameserver.datatables.ItemTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -78,7 +78,7 @@ public class AuctionItem public ItemInstance createNewItemInstance() { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), _itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), _itemId); World.getInstance().addObject(item); item.setCount(_itemCount); item.setEnchantLevel(item.getItem().getDefaultEnchantLevel()); diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 65b343278c..db7f1e7095 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -47,8 +47,8 @@ import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemSkillType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.CastleManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.SiegeGuardManager; import org.l2jmobius.gameserver.model.DropProtection; @@ -259,7 +259,7 @@ public class ItemInstance extends WorldObject */ public ItemInstance(int itemId) { - this(IdFactory.getNextId(), itemId); + this(IdManager.getInstance().getNextId(), itemId); } /** diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java index ee2437143a..7fa54aa75e 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java @@ -16,7 +16,7 @@ */ package org.l2jmobius.gameserver.model.zone; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -50,7 +50,7 @@ public abstract class ZoneForm protected final void dropDebugItem(int itemId, int num, int x, int y, int z) { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); item.setCount(num); item.spawnMe(x, y, z + 5); ZoneManager.getInstance().getDebugItems().add(item); diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/GameServer.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/GameServer.java index b1770481cd..aeb55a5a98 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/GameServer.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/GameServer.java @@ -107,7 +107,6 @@ import org.l2jmobius.gameserver.handler.ConditionHandler; import org.l2jmobius.gameserver.handler.DailyMissionHandler; import org.l2jmobius.gameserver.handler.EffectHandler; import org.l2jmobius.gameserver.handler.SkillConditionHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AirShipManager; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.BoatManager; @@ -124,6 +123,7 @@ import org.l2jmobius.gameserver.instancemanager.FakePlayerChatManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.GraciaSeedsManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.instancemanager.ItemAuctionManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; @@ -206,9 +206,9 @@ public class GameServer printSection("ThreadPool"); ThreadPool.init(); - printSection("IdFactory"); - IdFactory.init(); - if (!IdFactory.hasInitialized()) + printSection("IdManager"); + IdManager.getInstance(); + if (!IdManager.hasInitialized()) { LOGGER.severe(getClass().getSimpleName() + ": Could not read object IDs from database. Please check your configuration."); throw new Exception("Could not initialize the ID factory!"); @@ -424,7 +424,7 @@ public class GameServer Runtime.getRuntime().addShutdownHook(Shutdown.getInstance()); - LOGGER.info("IdFactory: Free ObjectID's remaining: " + IdFactory.size()); + LOGGER.info("IdManager: Free ObjectID's remaining: " + IdManager.size()); if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS) { diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java index 21cdff27ff..6fa1579a6d 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java @@ -35,10 +35,10 @@ import org.l2jmobius.gameserver.communitybbs.Manager.ForumsBBSManager; import org.l2jmobius.gameserver.data.xml.impl.ClanHallData; import org.l2jmobius.gameserver.enums.ClanWarState; import org.l2jmobius.gameserver.enums.UserInfoType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.ClanEntryManager; import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.SiegeManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -196,7 +196,7 @@ public class ClanTable return null; } - final Clan clan = new Clan(IdFactory.getNextId(), clanName); + final Clan clan = new Clan(IdManager.getInstance().getNextId(), clanName); final ClanMember leader = new ClanMember(clan, player); clan.setLeader(leader); leader.setPlayerInstance(player); @@ -271,7 +271,7 @@ public class ClanTable } _clans.remove(clanId); - IdFactory.releaseId(clanId); + IdManager.getInstance().releaseId(clanId); try (Connection con = DatabaseFactory.getConnection()) { diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/datatables/ItemTable.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/datatables/ItemTable.java index ffbc08a6d9..da12c37a86 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/datatables/ItemTable.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/datatables/ItemTable.java @@ -34,7 +34,7 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.data.xml.impl.EnchantItemHPBonusData; import org.l2jmobius.gameserver.engines.DocumentEngine; import org.l2jmobius.gameserver.enums.ItemLocation; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Attackable; @@ -212,7 +212,7 @@ public class ItemTable public ItemInstance createItem(String process, int itemId, long count, Creature actor, Object reference) { // Create and Init the ItemInstance corresponding to the Item Identifier - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); if (process.equalsIgnoreCase("loot") && !Config.AUTO_LOOT_ITEM_IDS.contains(itemId)) { ScheduledFuture itemLootShedule; @@ -330,7 +330,7 @@ public class ItemTable item.setLastChange(ItemInstance.REMOVED); World.getInstance().removeObject(item); - IdFactory.releaseId(item.getObjectId()); + IdManager.getInstance().releaseId(item.getObjectId()); if (Config.LOG_ITEMS) { diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/idfactory/IdFactory.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/idfactory/IdFactory.java deleted file mode 100644 index d4447a7dea..0000000000 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/idfactory/IdFactory.java +++ /dev/null @@ -1,337 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.l2jmobius.gameserver.idfactory; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.BitSet; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.logging.Logger; - -import org.l2jmobius.Config; -import org.l2jmobius.commons.concurrent.ThreadPool; -import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.util.PrimeFinder; - -/** - * @author Mobius (reworked from L2J version) - */ -public abstract class IdFactory -{ - private static final Logger LOGGER = Logger.getLogger(IdFactory.class.getName()); - - protected static final String[] ID_CHECKS = - { - "SELECT owner_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT object_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT charId FROM character_quests WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_contacts WHERE charId >= ? AND charId < ?", - "SELECT contactId FROM character_contacts WHERE contactId >= ? AND contactId < ?", - "SELECT charId FROM character_friends WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_friends WHERE friendId >= ? AND friendId < ?", - "SELECT charId FROM character_hennas WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipebook WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipeshoplist WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_shortcuts WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_macroses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills_save WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_subclasses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM characters WHERE charId >= ? AND charId < ?", - "SELECT clanid FROM characters WHERE clanid >= ? AND clanid < ?", - "SELECT clan_id FROM clan_data WHERE clan_id >= ? AND clan_id < ?", - "SELECT clan_id FROM siege_clans WHERE clan_id >= ? AND clan_id < ?", - "SELECT ally_id FROM clan_data WHERE ally_id >= ? AND ally_id < ?", - "SELECT leader_id FROM clan_data WHERE leader_id >= ? AND leader_id < ?", - "SELECT item_obj_id FROM pets WHERE item_obj_id >= ? AND item_obj_id < ?", - "SELECT object_id FROM itemsonground WHERE object_id >= ? AND object_id < ?", - "SELECT summonId FROM characters_summons WHERE summonId >= ? AND summonId < ?" - }; - //@formatter:off - private static final String[][] ID_EXTRACTS = - { - {"characters","charId"}, - {"items","object_id"}, - {"clan_data","clan_id"}, - {"itemsonground","object_id"}, - {"messages","messageId"} - }; - //@formatter:on - private static final String[] TIMESTAMPS_CLEAN = - { - "DELETE FROM character_instance_time WHERE time <= ?", - "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" - }; - public static final int FIRST_OID = 0x10000000; - public static final int LAST_OID = 0x7FFFFFFF; - public static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; - - private static BitSet _freeIds; - private static AtomicInteger _freeIdCount; - private static AtomicInteger _nextFreeId; - private static boolean _initialized; - - public static void init() - { - // Update characters online status. - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - statement.executeUpdate("UPDATE characters SET online = 0"); - LOGGER.info("Updated characters online status."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not update characters online status: " + e); - } - - // Cleanup database. - if (Config.DATABASE_CLEAN_UP) - { - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - final long cleanupStart = System.currentTimeMillis(); - int cleanCount = 0; - - // Characters - cleanCount += statement.executeUpdate("DELETE FROM account_gsdata WHERE account_gsdata.account_name NOT IN (SELECT account_name FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.contactId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.friendId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_hennas WHERE character_hennas.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_macroses WHERE character_macroses.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_quests WHERE character_quests.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_recipebook WHERE character_recipebook.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_recipeshoplist WHERE character_recipeshoplist.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_shortcuts WHERE character_shortcuts.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_skills WHERE character_skills.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_skills_save WHERE character_skills_save.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_subclasses WHERE character_subclasses.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_instance_time WHERE character_instance_time.charId NOT IN (SELECT charId FROM characters);"); - - // Items - cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id NOT IN (SELECT charId FROM characters) AND items.owner_id NOT IN (SELECT clan_id FROM clan_data) AND items.owner_id != -1;"); - cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id = -1 AND loc LIKE 'MAIL' AND loc_data NOT IN (SELECT messageId FROM messages WHERE senderId = -1);"); - cleanCount += statement.executeUpdate("DELETE FROM item_auction_bid WHERE item_auction_bid.playerObjId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM item_variations WHERE item_variations.itemId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_elementals WHERE item_elementals.itemId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_special_abilities WHERE item_special_abilities.objectId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_variables WHERE item_variables.id NOT IN (SELECT object_id FROM items);"); - - // Misc - cleanCount += statement.executeUpdate("DELETE FROM cursed_weapons WHERE cursed_weapons.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM heroes WHERE heroes.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles WHERE olympiad_nobles.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles_eom WHERE olympiad_nobles_eom.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM pets WHERE pets.item_obj_id NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM merchant_lease WHERE merchant_lease.player_id NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_reco_bonus WHERE character_reco_bonus.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.leader_id NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.clan_id NOT IN (SELECT clanid FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charOneId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charTwoId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM heroes_diary WHERE heroes_diary.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade WHERE character_offline_trade.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade_items WHERE character_offline_trade_items.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_tpbookmark WHERE character_tpbookmark.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_variables WHERE character_variables.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM bot_reported_char_data WHERE bot_reported_char_data.botId NOT IN (SELECT charId FROM characters);"); - - // Clan - cleanCount += statement.executeUpdate("DELETE FROM clan_privs WHERE clan_privs.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_skills WHERE clan_skills.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_subpledges WHERE clan_subpledges.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan1 NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan2 NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM siege_clans WHERE siege_clans.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_notices WHERE clan_notices.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM auction_bid WHERE auction_bid.bidderId NOT IN (SELECT clan_id FROM clan_data);"); - - // Forums - cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT clan_id FROM clan_data) AND forums.forum_parent=2;"); - cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT charId FROM characters) AND forums.forum_parent=3;"); - cleanCount += statement.executeUpdate("DELETE FROM posts WHERE posts.post_forum_id NOT IN (SELECT forum_id FROM forums);"); - cleanCount += statement.executeUpdate("DELETE FROM topic WHERE topic.topic_forum_id NOT IN (SELECT forum_id FROM forums);"); - - // Update needed items after cleaning has taken place. - statement.executeUpdate("UPDATE clan_data SET auction_bid_at = 0 WHERE auction_bid_at NOT IN (SELECT auctionId FROM auction_bid);"); - statement.executeUpdate("UPDATE clan_data SET new_leader_id = 0 WHERE new_leader_id <> 0 AND new_leader_id NOT IN (SELECT charId FROM characters);"); - statement.executeUpdate("UPDATE clan_subpledges SET leader_id=0 WHERE clan_subpledges.leader_id NOT IN (SELECT charId FROM characters) AND leader_id > 0;"); - statement.executeUpdate("UPDATE castle SET side='NEUTRAL' WHERE castle.id NOT IN (SELECT hasCastle FROM clan_data);"); - statement.executeUpdate("UPDATE characters SET clanid=0, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0, clan_join_expiry_time=0, clan_create_expiry_time=0 WHERE characters.clanid > 0 AND characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); - statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); - - LOGGER.info("IdFactory: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not clean up database: " + e); - } - } - - // Cleanup timestamps. - try (Connection con = DatabaseFactory.getConnection()) - { - int cleanCount = 0; - for (String line : TIMESTAMPS_CLEAN) - { - try (PreparedStatement statement = con.prepareStatement(line)) - { - statement.setLong(1, System.currentTimeMillis()); - cleanCount += statement.executeUpdate(); - } - } - LOGGER.info("IdFactory: Cleaned " + cleanCount + " expired timestamps from database."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not clean expired timestamps from database. " + e); - } - - // Initialize. - try - { - _freeIds = new BitSet(PrimeFinder.nextPrime(100000)); - _freeIds.clear(); - _freeIdCount = new AtomicInteger(FREE_OBJECT_ID_SIZE); - - // Collect already used ids. - final List usedIds = new ArrayList<>(); - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - String extractUsedObjectIdsQuery = ""; - for (String[] tblClmn : ID_EXTRACTS) - { - extractUsedObjectIdsQuery += "SELECT " + tblClmn[1] + " FROM " + tblClmn[0] + " UNION "; - } - extractUsedObjectIdsQuery = extractUsedObjectIdsQuery.substring(0, extractUsedObjectIdsQuery.length() - 7); // Remove the last " UNION " - try (ResultSet result = statement.executeQuery(extractUsedObjectIdsQuery)) - { - while (result.next()) - { - usedIds.add(result.getInt(1)); - } - } - } - Collections.sort(usedIds); - - // Register used ids. - for (int usedObjectId : usedIds) - { - final int objectId = usedObjectId - FIRST_OID; - if (objectId < 0) - { - LOGGER.warning("IdFactory: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); - continue; - } - _freeIds.set(usedObjectId - FIRST_OID); - _freeIdCount.decrementAndGet(); - } - - _nextFreeId = new AtomicInteger(_freeIds.nextClearBit(0)); - _initialized = true; - } - catch (Exception e) - { - _initialized = false; - LOGGER.severe("IdFactory: Could not be initialized properly: " + e.getMessage()); - } - - // Schedule increase capacity task. - ThreadPool.scheduleAtFixedRate(() -> - { - synchronized (_nextFreeId) - { - if (PrimeFinder.nextPrime((usedIdCount() * 11) / 10) > _freeIds.size()) - { - increaseBitSetCapacity(); - } - } - }, 30000, 30000); - - LOGGER.info("IdFactory: " + _freeIds.size() + " id's available."); - } - - public synchronized static void releaseId(int objectId) - { - synchronized (_nextFreeId) - { - if ((objectId - FIRST_OID) > -1) - { - _freeIds.clear(objectId - FIRST_OID); - _freeIdCount.incrementAndGet(); - } - else - { - LOGGER.warning("IdFactory: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); - } - } - } - - public synchronized static int getNextId() - { - synchronized (_nextFreeId) - { - final int newId = _nextFreeId.get(); - _freeIds.set(newId); - _freeIdCount.decrementAndGet(); - - final int nextFree = _freeIds.nextClearBit(newId) < 0 ? _freeIds.nextClearBit(0) : _freeIds.nextClearBit(newId); - if (nextFree < 0) - { - if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) - { - throw new NullPointerException("IdFactory: Ran out of valid ids."); - } - increaseBitSetCapacity(); - } - _nextFreeId.set(nextFree); - - return newId + FIRST_OID; - } - } - - private static void increaseBitSetCapacity() - { - final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); - newBitSet.or(_freeIds); - _freeIds = newBitSet; - } - - private static int usedIdCount() - { - return _freeIdCount.get() - FIRST_OID; - } - - public static int size() - { - return _freeIdCount.get(); - } - - public static boolean hasInitialized() - { - return _initialized; - } -} diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/instancemanager/IdManager.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/instancemanager/IdManager.java new file mode 100644 index 0000000000..d595a5befa --- /dev/null +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/instancemanager/IdManager.java @@ -0,0 +1,322 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.instancemanager; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.BitSet; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Logger; + +import org.l2jmobius.Config; +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.commons.database.DatabaseFactory; +import org.l2jmobius.gameserver.util.PrimeFinder; + +/** + * @author Mobius (reworked from L2J IdFactory) + */ +public class IdManager +{ + private static final Logger LOGGER = Logger.getLogger(IdManager.class.getName()); + + //@formatter:off + private static final String[][] ID_EXTRACTS = + { + {"characters","charId"}, + {"items","object_id"}, + {"clan_data","clan_id"}, + {"itemsonground","object_id"}, + {"messages","messageId"} + }; + //@formatter:on + + private static final String[] TIMESTAMPS_CLEAN = + { + "DELETE FROM character_instance_time WHERE time <= ?", + "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" + }; + + private static final int FIRST_OID = 0x10000000; + private static final int LAST_OID = 0x7FFFFFFF; + private static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; + + private static BitSet _freeIds; + private static AtomicInteger _freeIdCount; + private static AtomicInteger _nextFreeId; + private static boolean _initialized; + + public IdManager() + { + // Update characters online status. + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + statement.executeUpdate("UPDATE characters SET online = 0"); + LOGGER.info("Updated characters online status."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not update characters online status: " + e); + } + + // Cleanup database. + if (Config.DATABASE_CLEAN_UP) + { + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + final long cleanupStart = System.currentTimeMillis(); + int cleanCount = 0; + + // Characters + cleanCount += statement.executeUpdate("DELETE FROM account_gsdata WHERE account_gsdata.account_name NOT IN (SELECT account_name FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.contactId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.friendId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_hennas WHERE character_hennas.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_macroses WHERE character_macroses.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_quests WHERE character_quests.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_recipebook WHERE character_recipebook.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_recipeshoplist WHERE character_recipeshoplist.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_shortcuts WHERE character_shortcuts.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_skills WHERE character_skills.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_skills_save WHERE character_skills_save.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_subclasses WHERE character_subclasses.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_instance_time WHERE character_instance_time.charId NOT IN (SELECT charId FROM characters);"); + + // Items + cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id NOT IN (SELECT charId FROM characters) AND items.owner_id NOT IN (SELECT clan_id FROM clan_data) AND items.owner_id != -1;"); + cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id = -1 AND loc LIKE 'MAIL' AND loc_data NOT IN (SELECT messageId FROM messages WHERE senderId = -1);"); + cleanCount += statement.executeUpdate("DELETE FROM item_auction_bid WHERE item_auction_bid.playerObjId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM item_variations WHERE item_variations.itemId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_elementals WHERE item_elementals.itemId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_special_abilities WHERE item_special_abilities.objectId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_variables WHERE item_variables.id NOT IN (SELECT object_id FROM items);"); + + // Misc + cleanCount += statement.executeUpdate("DELETE FROM cursed_weapons WHERE cursed_weapons.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM heroes WHERE heroes.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles WHERE olympiad_nobles.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles_eom WHERE olympiad_nobles_eom.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM pets WHERE pets.item_obj_id NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM merchant_lease WHERE merchant_lease.player_id NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_reco_bonus WHERE character_reco_bonus.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.leader_id NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.clan_id NOT IN (SELECT clanid FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charOneId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charTwoId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM heroes_diary WHERE heroes_diary.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade WHERE character_offline_trade.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade_items WHERE character_offline_trade_items.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_tpbookmark WHERE character_tpbookmark.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_variables WHERE character_variables.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM bot_reported_char_data WHERE bot_reported_char_data.botId NOT IN (SELECT charId FROM characters);"); + + // Clan + cleanCount += statement.executeUpdate("DELETE FROM clan_privs WHERE clan_privs.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_skills WHERE clan_skills.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_subpledges WHERE clan_subpledges.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan1 NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan2 NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM siege_clans WHERE siege_clans.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_notices WHERE clan_notices.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM auction_bid WHERE auction_bid.bidderId NOT IN (SELECT clan_id FROM clan_data);"); + + // Forums + cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT clan_id FROM clan_data) AND forums.forum_parent=2;"); + cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT charId FROM characters) AND forums.forum_parent=3;"); + cleanCount += statement.executeUpdate("DELETE FROM posts WHERE posts.post_forum_id NOT IN (SELECT forum_id FROM forums);"); + cleanCount += statement.executeUpdate("DELETE FROM topic WHERE topic.topic_forum_id NOT IN (SELECT forum_id FROM forums);"); + + // Update needed items after cleaning has taken place. + statement.executeUpdate("UPDATE clan_data SET auction_bid_at = 0 WHERE auction_bid_at NOT IN (SELECT auctionId FROM auction_bid);"); + statement.executeUpdate("UPDATE clan_data SET new_leader_id = 0 WHERE new_leader_id <> 0 AND new_leader_id NOT IN (SELECT charId FROM characters);"); + statement.executeUpdate("UPDATE clan_subpledges SET leader_id=0 WHERE clan_subpledges.leader_id NOT IN (SELECT charId FROM characters) AND leader_id > 0;"); + statement.executeUpdate("UPDATE castle SET side='NEUTRAL' WHERE castle.id NOT IN (SELECT hasCastle FROM clan_data);"); + statement.executeUpdate("UPDATE characters SET clanid=0, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0, clan_join_expiry_time=0, clan_create_expiry_time=0 WHERE characters.clanid > 0 AND characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); + statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); + + LOGGER.info("IdManager: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not clean up database: " + e); + } + } + + // Cleanup timestamps. + try (Connection con = DatabaseFactory.getConnection()) + { + int cleanCount = 0; + for (String line : TIMESTAMPS_CLEAN) + { + try (PreparedStatement statement = con.prepareStatement(line)) + { + statement.setLong(1, System.currentTimeMillis()); + cleanCount += statement.executeUpdate(); + } + } + LOGGER.info("IdManager: Cleaned " + cleanCount + " expired timestamps from database."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not clean expired timestamps from database. " + e); + } + + // Initialize. + try + { + _freeIds = new BitSet(PrimeFinder.nextPrime(100000)); + _freeIds.clear(); + _freeIdCount = new AtomicInteger(FREE_OBJECT_ID_SIZE); + + // Collect already used ids. + final List usedIds = new ArrayList<>(); + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + String extractUsedObjectIdsQuery = ""; + for (String[] tblClmn : ID_EXTRACTS) + { + extractUsedObjectIdsQuery += "SELECT " + tblClmn[1] + " FROM " + tblClmn[0] + " UNION "; + } + extractUsedObjectIdsQuery = extractUsedObjectIdsQuery.substring(0, extractUsedObjectIdsQuery.length() - 7); // Remove the last " UNION " + try (ResultSet result = statement.executeQuery(extractUsedObjectIdsQuery)) + { + while (result.next()) + { + usedIds.add(result.getInt(1)); + } + } + } + Collections.sort(usedIds); + + // Register used ids. + for (int usedObjectId : usedIds) + { + final int objectId = usedObjectId - FIRST_OID; + if (objectId < 0) + { + LOGGER.warning("IdManager: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); + continue; + } + _freeIds.set(usedObjectId - FIRST_OID); + _freeIdCount.decrementAndGet(); + } + + _nextFreeId = new AtomicInteger(_freeIds.nextClearBit(0)); + _initialized = true; + } + catch (Exception e) + { + _initialized = false; + LOGGER.severe("IdManager: Could not be initialized properly: " + e.getMessage()); + } + + // Schedule increase capacity task. + ThreadPool.scheduleAtFixedRate(() -> + { + synchronized (_nextFreeId) + { + if (PrimeFinder.nextPrime((usedIdCount() * 11) / 10) > _freeIds.size()) + { + increaseBitSetCapacity(); + } + } + }, 30000, 30000); + + LOGGER.info("IdManager: " + _freeIds.size() + " id's available."); + } + + public void releaseId(int objectId) + { + synchronized (_nextFreeId) + { + if ((objectId - FIRST_OID) > -1) + { + _freeIds.clear(objectId - FIRST_OID); + _freeIdCount.incrementAndGet(); + } + else + { + LOGGER.warning("IdManager: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); + } + } + } + + public int getNextId() + { + synchronized (_nextFreeId) + { + final int newId = _nextFreeId.get(); + _freeIds.set(newId); + _freeIdCount.decrementAndGet(); + + final int nextFree = _freeIds.nextClearBit(newId) < 0 ? _freeIds.nextClearBit(0) : _freeIds.nextClearBit(newId); + if (nextFree < 0) + { + if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) + { + throw new NullPointerException("IdManager: Ran out of valid ids."); + } + increaseBitSetCapacity(); + } + _nextFreeId.set(nextFree); + + return newId + FIRST_OID; + } + } + + private void increaseBitSetCapacity() + { + final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); + newBitSet.or(_freeIds); + _freeIds = newBitSet; + } + + private int usedIdCount() + { + return _freeIdCount.get() - FIRST_OID; + } + + public static int size() + { + return _freeIdCount.get(); + } + + public static boolean hasInitialized() + { + return _initialized; + } + + public static IdManager getInstance() + { + return SingletonHolder.INSTANCE; + } + + private static class SingletonHolder + { + protected static final IdManager INSTANCE = new IdManager(); + } +} diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/instancemanager/MailManager.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/instancemanager/MailManager.java index 176b407caa..2a82541b39 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/instancemanager/MailManager.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/instancemanager/MailManager.java @@ -31,7 +31,6 @@ import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.entity.Message; @@ -277,7 +276,7 @@ public class MailManager } _messages.remove(msgId); - IdFactory.releaseId(msgId); + IdManager.getInstance().releaseId(msgId); } /** diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/Petition.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/Petition.java index 0c1524f59b..b19b6f9025 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/Petition.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/Petition.java @@ -21,7 +21,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.PetitionState; import org.l2jmobius.gameserver.enums.PetitionType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.PetitionManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -47,7 +47,7 @@ public class Petition public Petition(PlayerInstance petitioner, String petitionText, int petitionType) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _type = PetitionType.values()[petitionType - 1]; _content = petitionText; _petitioner = petitioner; diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/WorldObject.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/WorldObject.java index 18e793a718..3b8f7fb5fb 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/WorldObject.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/WorldObject.java @@ -24,7 +24,7 @@ import org.l2jmobius.gameserver.handler.ActionHandler; import org.l2jmobius.gameserver.handler.ActionShiftHandler; import org.l2jmobius.gameserver.handler.IActionHandler; import org.l2jmobius.gameserver.handler.IActionShiftHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; @@ -154,8 +154,8 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif public void refreshId() { World.getInstance().removeObject(this); - IdFactory.releaseId(getObjectId()); - _objectId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(getObjectId()); + _objectId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java index f1f6aeef1d..d6104e785e 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -64,7 +64,7 @@ import org.l2jmobius.gameserver.enums.Team; import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MapRegionManager; import org.l2jmobius.gameserver.instancemanager.QuestManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; @@ -289,7 +289,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public Creature(CreatureTemplate template) { - this(IdFactory.getNextId(), template); + this(IdManager.getInstance().getNextId(), template); } /** diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java index d132ad18fc..12209da801 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java @@ -20,7 +20,7 @@ import java.util.concurrent.Future; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.gameserver.enums.InstanceType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.stat.ControllableAirShipStat; import org.l2jmobius.gameserver.model.actor.templates.CreatureTemplate; import org.l2jmobius.gameserver.model.skills.AbnormalType; @@ -48,7 +48,7 @@ public class ControllableAirShipInstance extends AirShipInstance super(template); setInstanceType(InstanceType.ControllableAirShipInstance); _ownerId = ownerId; - _helmId = IdFactory.getNextId(); // not forget to release ! + _helmId = IdManager.getInstance().getNextId(); // not forget to release ! } @Override @@ -282,8 +282,8 @@ public class ControllableAirShipInstance extends AirShipInstance public void refreshId() { super.refreshId(); - IdFactory.releaseId(_helmId); - _helmId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(_helmId); + _helmId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java index 48c52c920f..c8412e68be 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.actor.instance; import org.l2jmobius.gameserver.data.xml.impl.FenceData; import org.l2jmobius.gameserver.enums.FenceState; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; @@ -44,7 +44,7 @@ public class FenceInstance extends WorldObject public FenceInstance(int x, int y, String name, int width, int length, int height, FenceState state) { - super(IdFactory.getNextId()); + super(IdManager.getInstance().getNextId()); _xMin = x - (width / 2); _xMax = x + (width / 2); @@ -59,7 +59,7 @@ public class FenceInstance extends WorldObject _heightFences = new int[height - 1]; for (int i = 0; i < _heightFences.length; i++) { - _heightFences[i] = IdFactory.getNextId(); + _heightFences[i] = IdManager.getInstance().getNextId(); } } } diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 62f736f83d..55f885dbc3 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -107,7 +107,6 @@ import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; import org.l2jmobius.gameserver.handler.IItemHandler; import org.l2jmobius.gameserver.handler.ItemHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CursedWeaponsManager; @@ -116,6 +115,7 @@ import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.HandysBlockCheckerManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager; import org.l2jmobius.gameserver.instancemanager.MentorManager; @@ -1148,7 +1148,7 @@ public class PlayerInstance extends Playable */ private PlayerInstance(PlayerTemplate template, String accountName, PlayerAppearance app) { - this(IdFactory.getNextId(), template, accountName, app); + this(IdManager.getInstance().getNextId(), template, accountName, app); } @Override diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java index 0564bbbe5e..b493b68bcc 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java @@ -21,7 +21,7 @@ import java.util.Locale; import org.l2jmobius.Config; import org.l2jmobius.commons.util.StringUtil; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.HistoryInfo; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.RaceState; @@ -160,7 +160,7 @@ public class RaceManagerInstance extends Npc player.setRace(0, 0); player.setRace(1, 0); - ItemInstance item = new ItemInstance(IdFactory.getNextId(), 4443); + ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 4443); item.setCount(1); item.setEnchantLevel(MonsterRace.getInstance().getRaceNumber()); item.setCustomType1(ticket); diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java index 6762897720..929d68a27f 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.announce; import java.util.Date; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.script.DateRange; /** @@ -32,7 +32,7 @@ public class EventAnnouncement implements IAnnouncement public EventAnnouncement(DateRange range, String content) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _range = range; _content = content; } @@ -88,7 +88,7 @@ public class EventAnnouncement implements IAnnouncement @Override public boolean deleteMe() { - IdFactory.releaseId(_id); + IdManager.getInstance().releaseId(_id); return true; } diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/entity/Couple.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/entity/Couple.java index 6897b8d681..54104ff7ab 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/entity/Couple.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/entity/Couple.java @@ -24,7 +24,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; /** @@ -85,7 +85,7 @@ public class Couple try (Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO mods_wedding (id, player1Id, player2Id, married, affianceDate, weddingDate) VALUES (?, ?, ?, ?, ?, ?)")) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); ps.setInt(1, _id); ps.setInt(2, _player1Id); ps.setInt(3, _player2Id); diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/entity/Message.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/entity/Message.java index 1b0ebe1d93..9002ebdc1a 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/entity/Message.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/entity/Message.java @@ -24,7 +24,7 @@ import java.sql.SQLException; import org.l2jmobius.gameserver.data.sql.impl.CharNameTable; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MailManager; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -99,7 +99,7 @@ public class Message */ public Message(int senderId, int receiverId, boolean isCod, String subject, String text, long reqAdena) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -118,7 +118,7 @@ public class Message */ public Message(int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = subject; @@ -138,7 +138,7 @@ public class Message */ public Message(int senderId, int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -157,7 +157,7 @@ public class Message */ public Message(Message msg) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = msg.getSenderId(); _receiverId = msg.getSenderId(); _subject = ""; @@ -177,7 +177,7 @@ public class Message public Message(int receiverId, ItemInstance item, MailType mailType) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = ""; diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java index e1e27e6111..800fb576c7 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java @@ -17,7 +17,7 @@ package org.l2jmobius.gameserver.model.itemauction; import org.l2jmobius.gameserver.datatables.ItemTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -78,7 +78,7 @@ public class AuctionItem public ItemInstance createNewItemInstance() { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), _itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), _itemId); World.getInstance().addObject(item); item.setCount(_itemCount); item.setEnchantLevel(item.getItem().getDefaultEnchantLevel()); diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 65b343278c..db7f1e7095 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -47,8 +47,8 @@ import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemSkillType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.CastleManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.SiegeGuardManager; import org.l2jmobius.gameserver.model.DropProtection; @@ -259,7 +259,7 @@ public class ItemInstance extends WorldObject */ public ItemInstance(int itemId) { - this(IdFactory.getNextId(), itemId); + this(IdManager.getInstance().getNextId(), itemId); } /** diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java index ee2437143a..7fa54aa75e 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java @@ -16,7 +16,7 @@ */ package org.l2jmobius.gameserver.model.zone; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -50,7 +50,7 @@ public abstract class ZoneForm protected final void dropDebugItem(int itemId, int num, int x, int y, int z) { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); item.setCount(num); item.spawnMe(x, y, z + 5); ZoneManager.getInstance().getDebugItems().add(item); diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/GameServer.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/GameServer.java index c5f414405c..d8d3547777 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/GameServer.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/GameServer.java @@ -108,7 +108,6 @@ import org.l2jmobius.gameserver.handler.ConditionHandler; import org.l2jmobius.gameserver.handler.DailyMissionHandler; import org.l2jmobius.gameserver.handler.EffectHandler; import org.l2jmobius.gameserver.handler.SkillConditionHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AirShipManager; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.BoatManager; @@ -125,6 +124,7 @@ import org.l2jmobius.gameserver.instancemanager.FakePlayerChatManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.GraciaSeedsManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.instancemanager.ItemAuctionManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; @@ -208,9 +208,9 @@ public class GameServer printSection("ThreadPool"); ThreadPool.init(); - printSection("IdFactory"); - IdFactory.init(); - if (!IdFactory.hasInitialized()) + printSection("IdManager"); + IdManager.getInstance(); + if (!IdManager.hasInitialized()) { LOGGER.severe(getClass().getSimpleName() + ": Could not read object IDs from database. Please check your configuration."); throw new Exception("Could not initialize the ID factory!"); @@ -428,7 +428,7 @@ public class GameServer Runtime.getRuntime().addShutdownHook(Shutdown.getInstance()); - LOGGER.info("IdFactory: Free ObjectID's remaining: " + IdFactory.size()); + LOGGER.info("IdManager: Free ObjectID's remaining: " + IdManager.size()); if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS) { diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java index 21cdff27ff..6fa1579a6d 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java @@ -35,10 +35,10 @@ import org.l2jmobius.gameserver.communitybbs.Manager.ForumsBBSManager; import org.l2jmobius.gameserver.data.xml.impl.ClanHallData; import org.l2jmobius.gameserver.enums.ClanWarState; import org.l2jmobius.gameserver.enums.UserInfoType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.ClanEntryManager; import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.SiegeManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -196,7 +196,7 @@ public class ClanTable return null; } - final Clan clan = new Clan(IdFactory.getNextId(), clanName); + final Clan clan = new Clan(IdManager.getInstance().getNextId(), clanName); final ClanMember leader = new ClanMember(clan, player); clan.setLeader(leader); leader.setPlayerInstance(player); @@ -271,7 +271,7 @@ public class ClanTable } _clans.remove(clanId); - IdFactory.releaseId(clanId); + IdManager.getInstance().releaseId(clanId); try (Connection con = DatabaseFactory.getConnection()) { diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/datatables/ItemTable.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/datatables/ItemTable.java index ffbc08a6d9..da12c37a86 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/datatables/ItemTable.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/datatables/ItemTable.java @@ -34,7 +34,7 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.data.xml.impl.EnchantItemHPBonusData; import org.l2jmobius.gameserver.engines.DocumentEngine; import org.l2jmobius.gameserver.enums.ItemLocation; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Attackable; @@ -212,7 +212,7 @@ public class ItemTable public ItemInstance createItem(String process, int itemId, long count, Creature actor, Object reference) { // Create and Init the ItemInstance corresponding to the Item Identifier - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); if (process.equalsIgnoreCase("loot") && !Config.AUTO_LOOT_ITEM_IDS.contains(itemId)) { ScheduledFuture itemLootShedule; @@ -330,7 +330,7 @@ public class ItemTable item.setLastChange(ItemInstance.REMOVED); World.getInstance().removeObject(item); - IdFactory.releaseId(item.getObjectId()); + IdManager.getInstance().releaseId(item.getObjectId()); if (Config.LOG_ITEMS) { diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/idfactory/IdFactory.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/idfactory/IdFactory.java deleted file mode 100644 index d4447a7dea..0000000000 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/idfactory/IdFactory.java +++ /dev/null @@ -1,337 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.l2jmobius.gameserver.idfactory; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.BitSet; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.logging.Logger; - -import org.l2jmobius.Config; -import org.l2jmobius.commons.concurrent.ThreadPool; -import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.util.PrimeFinder; - -/** - * @author Mobius (reworked from L2J version) - */ -public abstract class IdFactory -{ - private static final Logger LOGGER = Logger.getLogger(IdFactory.class.getName()); - - protected static final String[] ID_CHECKS = - { - "SELECT owner_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT object_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT charId FROM character_quests WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_contacts WHERE charId >= ? AND charId < ?", - "SELECT contactId FROM character_contacts WHERE contactId >= ? AND contactId < ?", - "SELECT charId FROM character_friends WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_friends WHERE friendId >= ? AND friendId < ?", - "SELECT charId FROM character_hennas WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipebook WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipeshoplist WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_shortcuts WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_macroses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills_save WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_subclasses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM characters WHERE charId >= ? AND charId < ?", - "SELECT clanid FROM characters WHERE clanid >= ? AND clanid < ?", - "SELECT clan_id FROM clan_data WHERE clan_id >= ? AND clan_id < ?", - "SELECT clan_id FROM siege_clans WHERE clan_id >= ? AND clan_id < ?", - "SELECT ally_id FROM clan_data WHERE ally_id >= ? AND ally_id < ?", - "SELECT leader_id FROM clan_data WHERE leader_id >= ? AND leader_id < ?", - "SELECT item_obj_id FROM pets WHERE item_obj_id >= ? AND item_obj_id < ?", - "SELECT object_id FROM itemsonground WHERE object_id >= ? AND object_id < ?", - "SELECT summonId FROM characters_summons WHERE summonId >= ? AND summonId < ?" - }; - //@formatter:off - private static final String[][] ID_EXTRACTS = - { - {"characters","charId"}, - {"items","object_id"}, - {"clan_data","clan_id"}, - {"itemsonground","object_id"}, - {"messages","messageId"} - }; - //@formatter:on - private static final String[] TIMESTAMPS_CLEAN = - { - "DELETE FROM character_instance_time WHERE time <= ?", - "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" - }; - public static final int FIRST_OID = 0x10000000; - public static final int LAST_OID = 0x7FFFFFFF; - public static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; - - private static BitSet _freeIds; - private static AtomicInteger _freeIdCount; - private static AtomicInteger _nextFreeId; - private static boolean _initialized; - - public static void init() - { - // Update characters online status. - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - statement.executeUpdate("UPDATE characters SET online = 0"); - LOGGER.info("Updated characters online status."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not update characters online status: " + e); - } - - // Cleanup database. - if (Config.DATABASE_CLEAN_UP) - { - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - final long cleanupStart = System.currentTimeMillis(); - int cleanCount = 0; - - // Characters - cleanCount += statement.executeUpdate("DELETE FROM account_gsdata WHERE account_gsdata.account_name NOT IN (SELECT account_name FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.contactId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.friendId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_hennas WHERE character_hennas.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_macroses WHERE character_macroses.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_quests WHERE character_quests.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_recipebook WHERE character_recipebook.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_recipeshoplist WHERE character_recipeshoplist.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_shortcuts WHERE character_shortcuts.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_skills WHERE character_skills.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_skills_save WHERE character_skills_save.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_subclasses WHERE character_subclasses.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_instance_time WHERE character_instance_time.charId NOT IN (SELECT charId FROM characters);"); - - // Items - cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id NOT IN (SELECT charId FROM characters) AND items.owner_id NOT IN (SELECT clan_id FROM clan_data) AND items.owner_id != -1;"); - cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id = -1 AND loc LIKE 'MAIL' AND loc_data NOT IN (SELECT messageId FROM messages WHERE senderId = -1);"); - cleanCount += statement.executeUpdate("DELETE FROM item_auction_bid WHERE item_auction_bid.playerObjId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM item_variations WHERE item_variations.itemId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_elementals WHERE item_elementals.itemId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_special_abilities WHERE item_special_abilities.objectId NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM item_variables WHERE item_variables.id NOT IN (SELECT object_id FROM items);"); - - // Misc - cleanCount += statement.executeUpdate("DELETE FROM cursed_weapons WHERE cursed_weapons.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM heroes WHERE heroes.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles WHERE olympiad_nobles.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles_eom WHERE olympiad_nobles_eom.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM pets WHERE pets.item_obj_id NOT IN (SELECT object_id FROM items);"); - cleanCount += statement.executeUpdate("DELETE FROM merchant_lease WHERE merchant_lease.player_id NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_reco_bonus WHERE character_reco_bonus.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.leader_id NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.clan_id NOT IN (SELECT clanid FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charOneId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charTwoId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM heroes_diary WHERE heroes_diary.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade WHERE character_offline_trade.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade_items WHERE character_offline_trade_items.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_tpbookmark WHERE character_tpbookmark.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM character_variables WHERE character_variables.charId NOT IN (SELECT charId FROM characters);"); - cleanCount += statement.executeUpdate("DELETE FROM bot_reported_char_data WHERE bot_reported_char_data.botId NOT IN (SELECT charId FROM characters);"); - - // Clan - cleanCount += statement.executeUpdate("DELETE FROM clan_privs WHERE clan_privs.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_skills WHERE clan_skills.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_subpledges WHERE clan_subpledges.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan1 NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan2 NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM siege_clans WHERE siege_clans.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM clan_notices WHERE clan_notices.clan_id NOT IN (SELECT clan_id FROM clan_data);"); - cleanCount += statement.executeUpdate("DELETE FROM auction_bid WHERE auction_bid.bidderId NOT IN (SELECT clan_id FROM clan_data);"); - - // Forums - cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT clan_id FROM clan_data) AND forums.forum_parent=2;"); - cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT charId FROM characters) AND forums.forum_parent=3;"); - cleanCount += statement.executeUpdate("DELETE FROM posts WHERE posts.post_forum_id NOT IN (SELECT forum_id FROM forums);"); - cleanCount += statement.executeUpdate("DELETE FROM topic WHERE topic.topic_forum_id NOT IN (SELECT forum_id FROM forums);"); - - // Update needed items after cleaning has taken place. - statement.executeUpdate("UPDATE clan_data SET auction_bid_at = 0 WHERE auction_bid_at NOT IN (SELECT auctionId FROM auction_bid);"); - statement.executeUpdate("UPDATE clan_data SET new_leader_id = 0 WHERE new_leader_id <> 0 AND new_leader_id NOT IN (SELECT charId FROM characters);"); - statement.executeUpdate("UPDATE clan_subpledges SET leader_id=0 WHERE clan_subpledges.leader_id NOT IN (SELECT charId FROM characters) AND leader_id > 0;"); - statement.executeUpdate("UPDATE castle SET side='NEUTRAL' WHERE castle.id NOT IN (SELECT hasCastle FROM clan_data);"); - statement.executeUpdate("UPDATE characters SET clanid=0, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0, clan_join_expiry_time=0, clan_create_expiry_time=0 WHERE characters.clanid > 0 AND characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); - statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); - - LOGGER.info("IdFactory: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not clean up database: " + e); - } - } - - // Cleanup timestamps. - try (Connection con = DatabaseFactory.getConnection()) - { - int cleanCount = 0; - for (String line : TIMESTAMPS_CLEAN) - { - try (PreparedStatement statement = con.prepareStatement(line)) - { - statement.setLong(1, System.currentTimeMillis()); - cleanCount += statement.executeUpdate(); - } - } - LOGGER.info("IdFactory: Cleaned " + cleanCount + " expired timestamps from database."); - } - catch (Exception e) - { - LOGGER.warning("IdFactory: Could not clean expired timestamps from database. " + e); - } - - // Initialize. - try - { - _freeIds = new BitSet(PrimeFinder.nextPrime(100000)); - _freeIds.clear(); - _freeIdCount = new AtomicInteger(FREE_OBJECT_ID_SIZE); - - // Collect already used ids. - final List usedIds = new ArrayList<>(); - try (Connection con = DatabaseFactory.getConnection(); - Statement statement = con.createStatement()) - { - String extractUsedObjectIdsQuery = ""; - for (String[] tblClmn : ID_EXTRACTS) - { - extractUsedObjectIdsQuery += "SELECT " + tblClmn[1] + " FROM " + tblClmn[0] + " UNION "; - } - extractUsedObjectIdsQuery = extractUsedObjectIdsQuery.substring(0, extractUsedObjectIdsQuery.length() - 7); // Remove the last " UNION " - try (ResultSet result = statement.executeQuery(extractUsedObjectIdsQuery)) - { - while (result.next()) - { - usedIds.add(result.getInt(1)); - } - } - } - Collections.sort(usedIds); - - // Register used ids. - for (int usedObjectId : usedIds) - { - final int objectId = usedObjectId - FIRST_OID; - if (objectId < 0) - { - LOGGER.warning("IdFactory: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); - continue; - } - _freeIds.set(usedObjectId - FIRST_OID); - _freeIdCount.decrementAndGet(); - } - - _nextFreeId = new AtomicInteger(_freeIds.nextClearBit(0)); - _initialized = true; - } - catch (Exception e) - { - _initialized = false; - LOGGER.severe("IdFactory: Could not be initialized properly: " + e.getMessage()); - } - - // Schedule increase capacity task. - ThreadPool.scheduleAtFixedRate(() -> - { - synchronized (_nextFreeId) - { - if (PrimeFinder.nextPrime((usedIdCount() * 11) / 10) > _freeIds.size()) - { - increaseBitSetCapacity(); - } - } - }, 30000, 30000); - - LOGGER.info("IdFactory: " + _freeIds.size() + " id's available."); - } - - public synchronized static void releaseId(int objectId) - { - synchronized (_nextFreeId) - { - if ((objectId - FIRST_OID) > -1) - { - _freeIds.clear(objectId - FIRST_OID); - _freeIdCount.incrementAndGet(); - } - else - { - LOGGER.warning("IdFactory: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); - } - } - } - - public synchronized static int getNextId() - { - synchronized (_nextFreeId) - { - final int newId = _nextFreeId.get(); - _freeIds.set(newId); - _freeIdCount.decrementAndGet(); - - final int nextFree = _freeIds.nextClearBit(newId) < 0 ? _freeIds.nextClearBit(0) : _freeIds.nextClearBit(newId); - if (nextFree < 0) - { - if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) - { - throw new NullPointerException("IdFactory: Ran out of valid ids."); - } - increaseBitSetCapacity(); - } - _nextFreeId.set(nextFree); - - return newId + FIRST_OID; - } - } - - private static void increaseBitSetCapacity() - { - final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); - newBitSet.or(_freeIds); - _freeIds = newBitSet; - } - - private static int usedIdCount() - { - return _freeIdCount.get() - FIRST_OID; - } - - public static int size() - { - return _freeIdCount.get(); - } - - public static boolean hasInitialized() - { - return _initialized; - } -} diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/instancemanager/IdManager.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/instancemanager/IdManager.java new file mode 100644 index 0000000000..d595a5befa --- /dev/null +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/instancemanager/IdManager.java @@ -0,0 +1,322 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.instancemanager; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.BitSet; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Logger; + +import org.l2jmobius.Config; +import org.l2jmobius.commons.concurrent.ThreadPool; +import org.l2jmobius.commons.database.DatabaseFactory; +import org.l2jmobius.gameserver.util.PrimeFinder; + +/** + * @author Mobius (reworked from L2J IdFactory) + */ +public class IdManager +{ + private static final Logger LOGGER = Logger.getLogger(IdManager.class.getName()); + + //@formatter:off + private static final String[][] ID_EXTRACTS = + { + {"characters","charId"}, + {"items","object_id"}, + {"clan_data","clan_id"}, + {"itemsonground","object_id"}, + {"messages","messageId"} + }; + //@formatter:on + + private static final String[] TIMESTAMPS_CLEAN = + { + "DELETE FROM character_instance_time WHERE time <= ?", + "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" + }; + + private static final int FIRST_OID = 0x10000000; + private static final int LAST_OID = 0x7FFFFFFF; + private static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; + + private static BitSet _freeIds; + private static AtomicInteger _freeIdCount; + private static AtomicInteger _nextFreeId; + private static boolean _initialized; + + public IdManager() + { + // Update characters online status. + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + statement.executeUpdate("UPDATE characters SET online = 0"); + LOGGER.info("Updated characters online status."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not update characters online status: " + e); + } + + // Cleanup database. + if (Config.DATABASE_CLEAN_UP) + { + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + final long cleanupStart = System.currentTimeMillis(); + int cleanCount = 0; + + // Characters + cleanCount += statement.executeUpdate("DELETE FROM account_gsdata WHERE account_gsdata.account_name NOT IN (SELECT account_name FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_contacts WHERE character_contacts.contactId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_friends WHERE character_friends.friendId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_hennas WHERE character_hennas.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_macroses WHERE character_macroses.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_quests WHERE character_quests.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_recipebook WHERE character_recipebook.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_recipeshoplist WHERE character_recipeshoplist.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_shortcuts WHERE character_shortcuts.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_skills WHERE character_skills.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_skills_save WHERE character_skills_save.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_subclasses WHERE character_subclasses.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_instance_time WHERE character_instance_time.charId NOT IN (SELECT charId FROM characters);"); + + // Items + cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id NOT IN (SELECT charId FROM characters) AND items.owner_id NOT IN (SELECT clan_id FROM clan_data) AND items.owner_id != -1;"); + cleanCount += statement.executeUpdate("DELETE FROM items WHERE items.owner_id = -1 AND loc LIKE 'MAIL' AND loc_data NOT IN (SELECT messageId FROM messages WHERE senderId = -1);"); + cleanCount += statement.executeUpdate("DELETE FROM item_auction_bid WHERE item_auction_bid.playerObjId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM item_variations WHERE item_variations.itemId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_elementals WHERE item_elementals.itemId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_special_abilities WHERE item_special_abilities.objectId NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM item_variables WHERE item_variables.id NOT IN (SELECT object_id FROM items);"); + + // Misc + cleanCount += statement.executeUpdate("DELETE FROM cursed_weapons WHERE cursed_weapons.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM heroes WHERE heroes.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles WHERE olympiad_nobles.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_nobles_eom WHERE olympiad_nobles_eom.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM pets WHERE pets.item_obj_id NOT IN (SELECT object_id FROM items);"); + cleanCount += statement.executeUpdate("DELETE FROM merchant_lease WHERE merchant_lease.player_id NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_reco_bonus WHERE character_reco_bonus.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.leader_id NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_data WHERE clan_data.clan_id NOT IN (SELECT clanid FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charOneId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM olympiad_fights WHERE olympiad_fights.charTwoId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM heroes_diary WHERE heroes_diary.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade WHERE character_offline_trade.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_offline_trade_items WHERE character_offline_trade_items.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_tpbookmark WHERE character_tpbookmark.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM character_variables WHERE character_variables.charId NOT IN (SELECT charId FROM characters);"); + cleanCount += statement.executeUpdate("DELETE FROM bot_reported_char_data WHERE bot_reported_char_data.botId NOT IN (SELECT charId FROM characters);"); + + // Clan + cleanCount += statement.executeUpdate("DELETE FROM clan_privs WHERE clan_privs.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_skills WHERE clan_skills.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_subpledges WHERE clan_subpledges.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan1 NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_wars WHERE clan_wars.clan2 NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM siege_clans WHERE siege_clans.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM clan_notices WHERE clan_notices.clan_id NOT IN (SELECT clan_id FROM clan_data);"); + cleanCount += statement.executeUpdate("DELETE FROM auction_bid WHERE auction_bid.bidderId NOT IN (SELECT clan_id FROM clan_data);"); + + // Forums + cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT clan_id FROM clan_data) AND forums.forum_parent=2;"); + cleanCount += statement.executeUpdate("DELETE FROM forums WHERE forums.forum_owner_id NOT IN (SELECT charId FROM characters) AND forums.forum_parent=3;"); + cleanCount += statement.executeUpdate("DELETE FROM posts WHERE posts.post_forum_id NOT IN (SELECT forum_id FROM forums);"); + cleanCount += statement.executeUpdate("DELETE FROM topic WHERE topic.topic_forum_id NOT IN (SELECT forum_id FROM forums);"); + + // Update needed items after cleaning has taken place. + statement.executeUpdate("UPDATE clan_data SET auction_bid_at = 0 WHERE auction_bid_at NOT IN (SELECT auctionId FROM auction_bid);"); + statement.executeUpdate("UPDATE clan_data SET new_leader_id = 0 WHERE new_leader_id <> 0 AND new_leader_id NOT IN (SELECT charId FROM characters);"); + statement.executeUpdate("UPDATE clan_subpledges SET leader_id=0 WHERE clan_subpledges.leader_id NOT IN (SELECT charId FROM characters) AND leader_id > 0;"); + statement.executeUpdate("UPDATE castle SET side='NEUTRAL' WHERE castle.id NOT IN (SELECT hasCastle FROM clan_data);"); + statement.executeUpdate("UPDATE characters SET clanid=0, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0, clan_join_expiry_time=0, clan_create_expiry_time=0 WHERE characters.clanid > 0 AND characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); + statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); + + LOGGER.info("IdManager: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not clean up database: " + e); + } + } + + // Cleanup timestamps. + try (Connection con = DatabaseFactory.getConnection()) + { + int cleanCount = 0; + for (String line : TIMESTAMPS_CLEAN) + { + try (PreparedStatement statement = con.prepareStatement(line)) + { + statement.setLong(1, System.currentTimeMillis()); + cleanCount += statement.executeUpdate(); + } + } + LOGGER.info("IdManager: Cleaned " + cleanCount + " expired timestamps from database."); + } + catch (Exception e) + { + LOGGER.warning("IdManager: Could not clean expired timestamps from database. " + e); + } + + // Initialize. + try + { + _freeIds = new BitSet(PrimeFinder.nextPrime(100000)); + _freeIds.clear(); + _freeIdCount = new AtomicInteger(FREE_OBJECT_ID_SIZE); + + // Collect already used ids. + final List usedIds = new ArrayList<>(); + try (Connection con = DatabaseFactory.getConnection(); + Statement statement = con.createStatement()) + { + String extractUsedObjectIdsQuery = ""; + for (String[] tblClmn : ID_EXTRACTS) + { + extractUsedObjectIdsQuery += "SELECT " + tblClmn[1] + " FROM " + tblClmn[0] + " UNION "; + } + extractUsedObjectIdsQuery = extractUsedObjectIdsQuery.substring(0, extractUsedObjectIdsQuery.length() - 7); // Remove the last " UNION " + try (ResultSet result = statement.executeQuery(extractUsedObjectIdsQuery)) + { + while (result.next()) + { + usedIds.add(result.getInt(1)); + } + } + } + Collections.sort(usedIds); + + // Register used ids. + for (int usedObjectId : usedIds) + { + final int objectId = usedObjectId - FIRST_OID; + if (objectId < 0) + { + LOGGER.warning("IdManager: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); + continue; + } + _freeIds.set(usedObjectId - FIRST_OID); + _freeIdCount.decrementAndGet(); + } + + _nextFreeId = new AtomicInteger(_freeIds.nextClearBit(0)); + _initialized = true; + } + catch (Exception e) + { + _initialized = false; + LOGGER.severe("IdManager: Could not be initialized properly: " + e.getMessage()); + } + + // Schedule increase capacity task. + ThreadPool.scheduleAtFixedRate(() -> + { + synchronized (_nextFreeId) + { + if (PrimeFinder.nextPrime((usedIdCount() * 11) / 10) > _freeIds.size()) + { + increaseBitSetCapacity(); + } + } + }, 30000, 30000); + + LOGGER.info("IdManager: " + _freeIds.size() + " id's available."); + } + + public void releaseId(int objectId) + { + synchronized (_nextFreeId) + { + if ((objectId - FIRST_OID) > -1) + { + _freeIds.clear(objectId - FIRST_OID); + _freeIdCount.incrementAndGet(); + } + else + { + LOGGER.warning("IdManager: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); + } + } + } + + public int getNextId() + { + synchronized (_nextFreeId) + { + final int newId = _nextFreeId.get(); + _freeIds.set(newId); + _freeIdCount.decrementAndGet(); + + final int nextFree = _freeIds.nextClearBit(newId) < 0 ? _freeIds.nextClearBit(0) : _freeIds.nextClearBit(newId); + if (nextFree < 0) + { + if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) + { + throw new NullPointerException("IdManager: Ran out of valid ids."); + } + increaseBitSetCapacity(); + } + _nextFreeId.set(nextFree); + + return newId + FIRST_OID; + } + } + + private void increaseBitSetCapacity() + { + final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); + newBitSet.or(_freeIds); + _freeIds = newBitSet; + } + + private int usedIdCount() + { + return _freeIdCount.get() - FIRST_OID; + } + + public static int size() + { + return _freeIdCount.get(); + } + + public static boolean hasInitialized() + { + return _initialized; + } + + public static IdManager getInstance() + { + return SingletonHolder.INSTANCE; + } + + private static class SingletonHolder + { + protected static final IdManager INSTANCE = new IdManager(); + } +} diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/instancemanager/MailManager.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/instancemanager/MailManager.java index 176b407caa..2a82541b39 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/instancemanager/MailManager.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/instancemanager/MailManager.java @@ -31,7 +31,6 @@ import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.entity.Message; @@ -277,7 +276,7 @@ public class MailManager } _messages.remove(msgId); - IdFactory.releaseId(msgId); + IdManager.getInstance().releaseId(msgId); } /** diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/Petition.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/Petition.java index 0c1524f59b..b19b6f9025 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/Petition.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/Petition.java @@ -21,7 +21,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.PetitionState; import org.l2jmobius.gameserver.enums.PetitionType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.PetitionManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -47,7 +47,7 @@ public class Petition public Petition(PlayerInstance petitioner, String petitionText, int petitionType) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _type = PetitionType.values()[petitionType - 1]; _content = petitionText; _petitioner = petitioner; diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/WorldObject.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/WorldObject.java index 18e793a718..3b8f7fb5fb 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/WorldObject.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/WorldObject.java @@ -24,7 +24,7 @@ import org.l2jmobius.gameserver.handler.ActionHandler; import org.l2jmobius.gameserver.handler.ActionShiftHandler; import org.l2jmobius.gameserver.handler.IActionHandler; import org.l2jmobius.gameserver.handler.IActionShiftHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; @@ -154,8 +154,8 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif public void refreshId() { World.getInstance().removeObject(this); - IdFactory.releaseId(getObjectId()); - _objectId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(getObjectId()); + _objectId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Creature.java index c450fd5c19..dd9b22a795 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -64,7 +64,7 @@ import org.l2jmobius.gameserver.enums.Team; import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MapRegionManager; import org.l2jmobius.gameserver.instancemanager.QuestManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; @@ -289,7 +289,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public Creature(CreatureTemplate template) { - this(IdFactory.getNextId(), template); + this(IdManager.getInstance().getNextId(), template); } /** diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java index d132ad18fc..12209da801 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java @@ -20,7 +20,7 @@ import java.util.concurrent.Future; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.gameserver.enums.InstanceType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.stat.ControllableAirShipStat; import org.l2jmobius.gameserver.model.actor.templates.CreatureTemplate; import org.l2jmobius.gameserver.model.skills.AbnormalType; @@ -48,7 +48,7 @@ public class ControllableAirShipInstance extends AirShipInstance super(template); setInstanceType(InstanceType.ControllableAirShipInstance); _ownerId = ownerId; - _helmId = IdFactory.getNextId(); // not forget to release ! + _helmId = IdManager.getInstance().getNextId(); // not forget to release ! } @Override @@ -282,8 +282,8 @@ public class ControllableAirShipInstance extends AirShipInstance public void refreshId() { super.refreshId(); - IdFactory.releaseId(_helmId); - _helmId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(_helmId); + _helmId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java index 48c52c920f..c8412e68be 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.actor.instance; import org.l2jmobius.gameserver.data.xml.impl.FenceData; import org.l2jmobius.gameserver.enums.FenceState; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; @@ -44,7 +44,7 @@ public class FenceInstance extends WorldObject public FenceInstance(int x, int y, String name, int width, int length, int height, FenceState state) { - super(IdFactory.getNextId()); + super(IdManager.getInstance().getNextId()); _xMin = x - (width / 2); _xMax = x + (width / 2); @@ -59,7 +59,7 @@ public class FenceInstance extends WorldObject _heightFences = new int[height - 1]; for (int i = 0; i < _heightFences.length; i++) { - _heightFences[i] = IdFactory.getNextId(); + _heightFences[i] = IdManager.getInstance().getNextId(); } } } diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index bd91de2395..755186927e 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -109,7 +109,6 @@ import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; import org.l2jmobius.gameserver.handler.IItemHandler; import org.l2jmobius.gameserver.handler.ItemHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CursedWeaponsManager; @@ -118,6 +117,7 @@ import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.HandysBlockCheckerManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.MapRegionManager; import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager; @@ -1167,7 +1167,7 @@ public class PlayerInstance extends Playable */ private PlayerInstance(PlayerTemplate template, String accountName, PlayerAppearance app) { - this(IdFactory.getNextId(), template, accountName, app); + this(IdManager.getInstance().getNextId(), template, accountName, app); } @Override diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java index 0564bbbe5e..b493b68bcc 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java @@ -21,7 +21,7 @@ import java.util.Locale; import org.l2jmobius.Config; import org.l2jmobius.commons.util.StringUtil; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.HistoryInfo; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.RaceState; @@ -160,7 +160,7 @@ public class RaceManagerInstance extends Npc player.setRace(0, 0); player.setRace(1, 0); - ItemInstance item = new ItemInstance(IdFactory.getNextId(), 4443); + ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 4443); item.setCount(1); item.setEnchantLevel(MonsterRace.getInstance().getRaceNumber()); item.setCustomType1(ticket); diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java index 6762897720..929d68a27f 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.announce; import java.util.Date; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.script.DateRange; /** @@ -32,7 +32,7 @@ public class EventAnnouncement implements IAnnouncement public EventAnnouncement(DateRange range, String content) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _range = range; _content = content; } @@ -88,7 +88,7 @@ public class EventAnnouncement implements IAnnouncement @Override public boolean deleteMe() { - IdFactory.releaseId(_id); + IdManager.getInstance().releaseId(_id); return true; } diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/entity/Couple.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/entity/Couple.java index 6897b8d681..54104ff7ab 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/entity/Couple.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/entity/Couple.java @@ -24,7 +24,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; /** @@ -85,7 +85,7 @@ public class Couple try (Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO mods_wedding (id, player1Id, player2Id, married, affianceDate, weddingDate) VALUES (?, ?, ?, ?, ?, ?)")) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); ps.setInt(1, _id); ps.setInt(2, _player1Id); ps.setInt(3, _player2Id); diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/entity/Message.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/entity/Message.java index 1b0ebe1d93..9002ebdc1a 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/entity/Message.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/entity/Message.java @@ -24,7 +24,7 @@ import java.sql.SQLException; import org.l2jmobius.gameserver.data.sql.impl.CharNameTable; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MailManager; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -99,7 +99,7 @@ public class Message */ public Message(int senderId, int receiverId, boolean isCod, String subject, String text, long reqAdena) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -118,7 +118,7 @@ public class Message */ public Message(int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = subject; @@ -138,7 +138,7 @@ public class Message */ public Message(int senderId, int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -157,7 +157,7 @@ public class Message */ public Message(Message msg) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = msg.getSenderId(); _receiverId = msg.getSenderId(); _subject = ""; @@ -177,7 +177,7 @@ public class Message public Message(int receiverId, ItemInstance item, MailType mailType) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = ""; diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java index e1e27e6111..800fb576c7 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java @@ -17,7 +17,7 @@ package org.l2jmobius.gameserver.model.itemauction; import org.l2jmobius.gameserver.datatables.ItemTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -78,7 +78,7 @@ public class AuctionItem public ItemInstance createNewItemInstance() { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), _itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), _itemId); World.getInstance().addObject(item); item.setCount(_itemCount); item.setEnchantLevel(item.getItem().getDefaultEnchantLevel()); diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 65b343278c..db7f1e7095 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -47,8 +47,8 @@ import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemSkillType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.CastleManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.SiegeGuardManager; import org.l2jmobius.gameserver.model.DropProtection; @@ -259,7 +259,7 @@ public class ItemInstance extends WorldObject */ public ItemInstance(int itemId) { - this(IdFactory.getNextId(), itemId); + this(IdManager.getInstance().getNextId(), itemId); } /** diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java index ee2437143a..7fa54aa75e 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java @@ -16,7 +16,7 @@ */ package org.l2jmobius.gameserver.model.zone; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -50,7 +50,7 @@ public abstract class ZoneForm protected final void dropDebugItem(int itemId, int num, int x, int y, int z) { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); item.setCount(num); item.spawnMe(x, y, z + 5); ZoneManager.getInstance().getDebugItems().add(item); diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/bypasshandlers/Loto.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/bypasshandlers/Loto.java index 54e95bfd4e..b7103e3e86 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/bypasshandlers/Loto.java +++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/bypasshandlers/Loto.java @@ -20,7 +20,7 @@ import java.text.DateFormat; import org.l2jmobius.Config; import org.l2jmobius.gameserver.handler.IBypassHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.games.Lottery; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Npc; @@ -220,7 +220,7 @@ public class Loto implements IBypassHandler sm.addItemName(4442); player.sendPacket(sm); - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), 4442); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 4442); item.setCount(1); item.setCustomType1(lotonumber); item.setEnchantLevel(enchant); diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/GameServer.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/GameServer.java index 3f4310903a..7c7b170427 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/GameServer.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/GameServer.java @@ -104,7 +104,6 @@ import org.l2jmobius.gameserver.handler.ConditionHandler; import org.l2jmobius.gameserver.handler.DailyMissionHandler; import org.l2jmobius.gameserver.handler.EffectHandler; import org.l2jmobius.gameserver.handler.SkillConditionHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AirShipManager; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.BoatManager; @@ -121,6 +120,7 @@ import org.l2jmobius.gameserver.instancemanager.FakePlayerChatManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.GraciaSeedsManager; import org.l2jmobius.gameserver.instancemanager.GrandBossManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.instancemanager.ItemAuctionManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; @@ -204,9 +204,9 @@ public class GameServer printSection("ThreadPool"); ThreadPool.init(); - printSection("IdFactory"); - IdFactory.init(); - if (!IdFactory.hasInitialized()) + printSection("IdManager"); + IdManager.getInstance(); + if (!IdManager.hasInitialized()) { LOGGER.severe(getClass().getSimpleName() + ": Could not read object IDs from database. Please check your configuration."); throw new Exception("Could not initialize the ID factory!"); @@ -420,7 +420,7 @@ public class GameServer Runtime.getRuntime().addShutdownHook(Shutdown.getInstance()); - LOGGER.info("IdFactory: Free ObjectID's remaining: " + IdFactory.size()); + LOGGER.info("IdManager: Free ObjectID's remaining: " + IdManager.size()); if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS) { diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java index 21cdff27ff..6fa1579a6d 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/data/sql/impl/ClanTable.java @@ -35,10 +35,10 @@ import org.l2jmobius.gameserver.communitybbs.Manager.ForumsBBSManager; import org.l2jmobius.gameserver.data.xml.impl.ClanHallData; import org.l2jmobius.gameserver.enums.ClanWarState; import org.l2jmobius.gameserver.enums.UserInfoType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.ClanEntryManager; import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.SiegeManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.clan.Clan; @@ -196,7 +196,7 @@ public class ClanTable return null; } - final Clan clan = new Clan(IdFactory.getNextId(), clanName); + final Clan clan = new Clan(IdManager.getInstance().getNextId(), clanName); final ClanMember leader = new ClanMember(clan, player); clan.setLeader(leader); leader.setPlayerInstance(player); @@ -271,7 +271,7 @@ public class ClanTable } _clans.remove(clanId); - IdFactory.releaseId(clanId); + IdManager.getInstance().releaseId(clanId); try (Connection con = DatabaseFactory.getConnection()) { diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/datatables/ItemTable.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/datatables/ItemTable.java index bfae3f7a36..facda38df8 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/datatables/ItemTable.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/datatables/ItemTable.java @@ -34,7 +34,7 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.data.xml.impl.EnchantItemHPBonusData; import org.l2jmobius.gameserver.engines.DocumentEngine; import org.l2jmobius.gameserver.enums.ItemLocation; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Attackable; @@ -209,7 +209,7 @@ public class ItemTable public ItemInstance createItem(String process, int itemId, long count, Creature actor, Object reference) { // Create and Init the ItemInstance corresponding to the Item Identifier - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); if (process.equalsIgnoreCase("loot") && !Config.AUTO_LOOT_ITEM_IDS.contains(itemId)) { ScheduledFuture itemLootShedule; @@ -327,7 +327,7 @@ public class ItemTable item.setLastChange(ItemInstance.REMOVED); World.getInstance().removeObject(item); - IdFactory.releaseId(item.getObjectId()); + IdManager.getInstance().releaseId(item.getObjectId()); if (Config.LOG_ITEMS) { diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/idfactory/IdFactory.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/instancemanager/IdManager.java similarity index 79% rename from L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/idfactory/IdFactory.java rename to L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/instancemanager/IdManager.java index a6c9771c45..4b0655694d 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/idfactory/IdFactory.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/instancemanager/IdManager.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.l2jmobius.gameserver.idfactory; +package org.l2jmobius.gameserver.instancemanager; import java.sql.Connection; import java.sql.PreparedStatement; @@ -33,39 +33,12 @@ import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.util.PrimeFinder; /** - * @author Mobius (reworked from L2J version) + * @author Mobius (reworked from L2J IdFactory) */ -public abstract class IdFactory +public class IdManager { - private static final Logger LOGGER = Logger.getLogger(IdFactory.class.getName()); + private static final Logger LOGGER = Logger.getLogger(IdManager.class.getName()); - protected static final String[] ID_CHECKS = - { - "SELECT owner_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT object_id FROM items WHERE object_id >= ? AND object_id < ?", - "SELECT charId FROM character_quests WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_contacts WHERE charId >= ? AND charId < ?", - "SELECT contactId FROM character_contacts WHERE contactId >= ? AND contactId < ?", - "SELECT charId FROM character_friends WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_friends WHERE friendId >= ? AND friendId < ?", - "SELECT charId FROM character_hennas WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipebook WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_recipeshoplist WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_shortcuts WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_macroses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_skills_save WHERE charId >= ? AND charId < ?", - "SELECT charId FROM character_subclasses WHERE charId >= ? AND charId < ?", - "SELECT charId FROM characters WHERE charId >= ? AND charId < ?", - "SELECT clanid FROM characters WHERE clanid >= ? AND clanid < ?", - "SELECT clan_id FROM clan_data WHERE clan_id >= ? AND clan_id < ?", - "SELECT clan_id FROM siege_clans WHERE clan_id >= ? AND clan_id < ?", - "SELECT ally_id FROM clan_data WHERE ally_id >= ? AND ally_id < ?", - "SELECT leader_id FROM clan_data WHERE leader_id >= ? AND leader_id < ?", - "SELECT item_obj_id FROM pets WHERE item_obj_id >= ? AND item_obj_id < ?", - "SELECT object_id FROM itemsonground WHERE object_id >= ? AND object_id < ?", - "SELECT summonId FROM characters_summons WHERE summonId >= ? AND summonId < ?" - }; //@formatter:off private static final String[][] ID_EXTRACTS = { @@ -76,21 +49,23 @@ public abstract class IdFactory {"messages","messageId"} }; //@formatter:on + private static final String[] TIMESTAMPS_CLEAN = { "DELETE FROM character_instance_time WHERE time <= ?", "DELETE FROM character_skills_save WHERE restore_type = 1 AND systime <= ?" }; - public static final int FIRST_OID = 0x10000000; - public static final int LAST_OID = 0x7FFFFFFF; - public static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; + + private static final int FIRST_OID = 0x10000000; + private static final int LAST_OID = 0x7FFFFFFF; + private static final int FREE_OBJECT_ID_SIZE = LAST_OID - FIRST_OID; private static BitSet _freeIds; private static AtomicInteger _freeIdCount; private static AtomicInteger _nextFreeId; private static boolean _initialized; - public static void init() + public IdManager() { // Update characters online status. try (Connection con = DatabaseFactory.getConnection(); @@ -101,7 +76,7 @@ public abstract class IdFactory } catch (Exception e) { - LOGGER.warning("IdFactory: Could not update characters online status: " + e); + LOGGER.warning("IdManager: Could not update characters online status: " + e); } // Cleanup database. @@ -181,11 +156,11 @@ public abstract class IdFactory statement.executeUpdate("UPDATE characters SET clanid=0, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0, clan_join_expiry_time=0, clan_create_expiry_time=0 WHERE characters.clanid > 0 AND characters.clanid NOT IN (SELECT clan_id FROM clan_data);"); statement.executeUpdate("UPDATE fort SET owner=0 WHERE owner NOT IN (SELECT clan_id FROM clan_data);"); - LOGGER.info("IdFactory: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); + LOGGER.info("IdManager: Cleaned " + cleanCount + " elements from database in " + ((System.currentTimeMillis() - cleanupStart) / 1000) + " seconds."); } catch (Exception e) { - LOGGER.warning("IdFactory: Could not clean up database: " + e); + LOGGER.warning("IdManager: Could not clean up database: " + e); } } @@ -201,11 +176,11 @@ public abstract class IdFactory cleanCount += statement.executeUpdate(); } } - LOGGER.info("IdFactory: Cleaned " + cleanCount + " expired timestamps from database."); + LOGGER.info("IdManager: Cleaned " + cleanCount + " expired timestamps from database."); } catch (Exception e) { - LOGGER.warning("IdFactory: Could not clean expired timestamps from database. " + e); + LOGGER.warning("IdManager: Could not clean expired timestamps from database. " + e); } // Initialize. @@ -242,7 +217,7 @@ public abstract class IdFactory final int objectId = usedObjectId - FIRST_OID; if (objectId < 0) { - LOGGER.warning("IdFactory: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); + LOGGER.warning("IdManager: Object ID " + usedObjectId + " in DB is less than minimum ID of " + FIRST_OID); continue; } _freeIds.set(usedObjectId - FIRST_OID); @@ -255,7 +230,7 @@ public abstract class IdFactory catch (Exception e) { _initialized = false; - LOGGER.severe("IdFactory: Could not be initialized properly: " + e.getMessage()); + LOGGER.severe("IdManager: Could not be initialized properly: " + e.getMessage()); } // Schedule increase capacity task. @@ -270,10 +245,10 @@ public abstract class IdFactory } }, 30000, 30000); - LOGGER.info("IdFactory: " + _freeIds.size() + " id's available."); + LOGGER.info("IdManager: " + _freeIds.size() + " id's available."); } - public synchronized static void releaseId(int objectId) + public void releaseId(int objectId) { synchronized (_nextFreeId) { @@ -284,12 +259,12 @@ public abstract class IdFactory } else { - LOGGER.warning("IdFactory: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); + LOGGER.warning("IdManager: Release objectID " + objectId + " failed (< " + FIRST_OID + ")"); } } } - public synchronized static int getNextId() + public int getNextId() { synchronized (_nextFreeId) { @@ -302,7 +277,7 @@ public abstract class IdFactory { if (_freeIds.size() >= FREE_OBJECT_ID_SIZE) { - throw new NullPointerException("IdFactory: Ran out of valid ids."); + throw new NullPointerException("IdManager: Ran out of valid ids."); } increaseBitSetCapacity(); } @@ -312,14 +287,14 @@ public abstract class IdFactory } } - private static void increaseBitSetCapacity() + private void increaseBitSetCapacity() { final BitSet newBitSet = new BitSet(PrimeFinder.nextPrime((usedIdCount() * 11) / 10)); newBitSet.or(_freeIds); _freeIds = newBitSet; } - private static int usedIdCount() + private int usedIdCount() { return _freeIdCount.get() - FIRST_OID; } @@ -333,4 +308,14 @@ public abstract class IdFactory { return _initialized; } + + public static IdManager getInstance() + { + return SingletonHolder.INSTANCE; + } + + private static class SingletonHolder + { + protected static final IdManager INSTANCE = new IdManager(); + } } diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/instancemanager/MailManager.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/instancemanager/MailManager.java index 176b407caa..2a82541b39 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/instancemanager/MailManager.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/instancemanager/MailManager.java @@ -31,7 +31,6 @@ import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.entity.Message; @@ -277,7 +276,7 @@ public class MailManager } _messages.remove(msgId); - IdFactory.releaseId(msgId); + IdManager.getInstance().releaseId(msgId); } /** diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/Petition.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/Petition.java index 0c1524f59b..b19b6f9025 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/Petition.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/Petition.java @@ -21,7 +21,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.PetitionState; import org.l2jmobius.gameserver.enums.PetitionType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.PetitionManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -47,7 +47,7 @@ public class Petition public Petition(PlayerInstance petitioner, String petitionText, int petitionType) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _type = PetitionType.values()[petitionType - 1]; _content = petitionText; _petitioner = petitioner; diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/WorldObject.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/WorldObject.java index 18e793a718..3b8f7fb5fb 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/WorldObject.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/WorldObject.java @@ -24,7 +24,7 @@ import org.l2jmobius.gameserver.handler.ActionHandler; import org.l2jmobius.gameserver.handler.ActionShiftHandler; import org.l2jmobius.gameserver.handler.IActionHandler; import org.l2jmobius.gameserver.handler.IActionShiftHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; @@ -154,8 +154,8 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif public void refreshId() { World.getInstance().removeObject(this); - IdFactory.releaseId(getObjectId()); - _objectId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(getObjectId()); + _objectId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Creature.java index e706a20968..56e4999036 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -63,7 +63,7 @@ import org.l2jmobius.gameserver.enums.Team; import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MapRegionManager; import org.l2jmobius.gameserver.instancemanager.QuestManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; @@ -288,7 +288,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe */ public Creature(CreatureTemplate template) { - this(IdFactory.getNextId(), template); + this(IdManager.getInstance().getNextId(), template); } /** diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java index d132ad18fc..12209da801 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/ControllableAirShipInstance.java @@ -20,7 +20,7 @@ import java.util.concurrent.Future; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.gameserver.enums.InstanceType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.stat.ControllableAirShipStat; import org.l2jmobius.gameserver.model.actor.templates.CreatureTemplate; import org.l2jmobius.gameserver.model.skills.AbnormalType; @@ -48,7 +48,7 @@ public class ControllableAirShipInstance extends AirShipInstance super(template); setInstanceType(InstanceType.ControllableAirShipInstance); _ownerId = ownerId; - _helmId = IdFactory.getNextId(); // not forget to release ! + _helmId = IdManager.getInstance().getNextId(); // not forget to release ! } @Override @@ -282,8 +282,8 @@ public class ControllableAirShipInstance extends AirShipInstance public void refreshId() { super.refreshId(); - IdFactory.releaseId(_helmId); - _helmId = IdFactory.getNextId(); + IdManager.getInstance().releaseId(_helmId); + _helmId = IdManager.getInstance().getNextId(); } @Override diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java index 48c52c920f..c8412e68be 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/FenceInstance.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.actor.instance; import org.l2jmobius.gameserver.data.xml.impl.FenceData; import org.l2jmobius.gameserver.enums.FenceState; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.actor.Creature; @@ -44,7 +44,7 @@ public class FenceInstance extends WorldObject public FenceInstance(int x, int y, String name, int width, int length, int height, FenceState state) { - super(IdFactory.getNextId()); + super(IdManager.getInstance().getNextId()); _xMin = x - (width / 2); _xMax = x + (width / 2); @@ -59,7 +59,7 @@ public class FenceInstance extends WorldObject _heightFences = new int[height - 1]; for (int i = 0; i < _heightFences.length; i++) { - _heightFences[i] = IdFactory.getNextId(); + _heightFences[i] = IdManager.getInstance().getNextId(); } } } diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 7c5044444e..1e704a272f 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -105,7 +105,6 @@ import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; import org.l2jmobius.gameserver.handler.IItemHandler; import org.l2jmobius.gameserver.handler.ItemHandler; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.AntiFeedManager; import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CursedWeaponsManager; @@ -114,6 +113,7 @@ import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortSiegeManager; import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager; import org.l2jmobius.gameserver.instancemanager.HandysBlockCheckerManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.MatchingRoomManager; import org.l2jmobius.gameserver.instancemanager.MentorManager; @@ -1142,7 +1142,7 @@ public class PlayerInstance extends Playable */ private PlayerInstance(PlayerTemplate template, String accountName, PlayerAppearance app) { - this(IdFactory.getNextId(), template, accountName, app); + this(IdManager.getInstance().getNextId(), template, accountName, app); } @Override diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java index 0564bbbe5e..b493b68bcc 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/RaceManagerInstance.java @@ -21,7 +21,7 @@ import java.util.Locale; import org.l2jmobius.Config; import org.l2jmobius.commons.util.StringUtil; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.HistoryInfo; import org.l2jmobius.gameserver.instancemanager.games.MonsterRace.RaceState; @@ -160,7 +160,7 @@ public class RaceManagerInstance extends Npc player.setRace(0, 0); player.setRace(1, 0); - ItemInstance item = new ItemInstance(IdFactory.getNextId(), 4443); + ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), 4443); item.setCount(1); item.setEnchantLevel(MonsterRace.getInstance().getRaceNumber()); item.setCustomType1(ticket); diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java index 6762897720..929d68a27f 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/announce/EventAnnouncement.java @@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.model.announce; import java.util.Date; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.script.DateRange; /** @@ -32,7 +32,7 @@ public class EventAnnouncement implements IAnnouncement public EventAnnouncement(DateRange range, String content) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); _range = range; _content = content; } @@ -88,7 +88,7 @@ public class EventAnnouncement implements IAnnouncement @Override public boolean deleteMe() { - IdFactory.releaseId(_id); + IdManager.getInstance().releaseId(_id); return true; } diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/entity/Couple.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/entity/Couple.java index 6897b8d681..54104ff7ab 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/entity/Couple.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/entity/Couple.java @@ -24,7 +24,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; /** @@ -85,7 +85,7 @@ public class Couple try (Connection con = DatabaseFactory.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO mods_wedding (id, player1Id, player2Id, married, affianceDate, weddingDate) VALUES (?, ?, ?, ?, ?, ?)")) { - _id = IdFactory.getNextId(); + _id = IdManager.getInstance().getNextId(); ps.setInt(1, _id); ps.setInt(2, _player1Id); ps.setInt(3, _player2Id); diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/entity/Message.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/entity/Message.java index 1b0ebe1d93..9002ebdc1a 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/entity/Message.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/entity/Message.java @@ -24,7 +24,7 @@ import java.sql.SQLException; import org.l2jmobius.gameserver.data.sql.impl.CharNameTable; import org.l2jmobius.gameserver.enums.AttributeType; import org.l2jmobius.gameserver.enums.MailType; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.MailManager; import org.l2jmobius.gameserver.model.itemcontainer.Mail; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -99,7 +99,7 @@ public class Message */ public Message(int senderId, int receiverId, boolean isCod, String subject, String text, long reqAdena) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -118,7 +118,7 @@ public class Message */ public Message(int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = subject; @@ -138,7 +138,7 @@ public class Message */ public Message(int senderId, int receiverId, String subject, String content, MailType sendBySystem) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = senderId; _receiverId = receiverId; _subject = subject; @@ -157,7 +157,7 @@ public class Message */ public Message(Message msg) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = msg.getSenderId(); _receiverId = msg.getSenderId(); _subject = ""; @@ -177,7 +177,7 @@ public class Message public Message(int receiverId, ItemInstance item, MailType mailType) { - _messageId = IdFactory.getNextId(); + _messageId = IdManager.getInstance().getNextId(); _senderId = -1; _receiverId = receiverId; _subject = ""; diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java index e1e27e6111..800fb576c7 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/itemauction/AuctionItem.java @@ -17,7 +17,7 @@ package org.l2jmobius.gameserver.model.itemauction; import org.l2jmobius.gameserver.datatables.ItemTable; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -78,7 +78,7 @@ public class AuctionItem public ItemInstance createNewItemInstance() { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), _itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), _itemId); World.getInstance().addObject(item); item.setCount(_itemCount); item.setEnchantLevel(item.getItem().getDefaultEnchantLevel()); diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java index 10da8ddbe3..9297549a09 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/items/instance/ItemInstance.java @@ -46,8 +46,8 @@ import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemSkillType; import org.l2jmobius.gameserver.enums.UserInfoType; import org.l2jmobius.gameserver.geoengine.GeoEngine; -import org.l2jmobius.gameserver.idfactory.IdFactory; import org.l2jmobius.gameserver.instancemanager.CastleManager; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import org.l2jmobius.gameserver.instancemanager.SiegeGuardManager; import org.l2jmobius.gameserver.model.DropProtection; @@ -254,7 +254,7 @@ public class ItemInstance extends WorldObject */ public ItemInstance(int itemId) { - this(IdFactory.getNextId(), itemId); + this(IdManager.getInstance().getNextId(), itemId); } /** diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java index ee2437143a..7fa54aa75e 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/zone/ZoneForm.java @@ -16,7 +16,7 @@ */ package org.l2jmobius.gameserver.model.zone; -import org.l2jmobius.gameserver.idfactory.IdFactory; +import org.l2jmobius.gameserver.instancemanager.IdManager; import org.l2jmobius.gameserver.instancemanager.ZoneManager; import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.items.instance.ItemInstance; @@ -50,7 +50,7 @@ public abstract class ZoneForm protected final void dropDebugItem(int itemId, int num, int x, int y, int z) { - final ItemInstance item = new ItemInstance(IdFactory.getNextId(), itemId); + final ItemInstance item = new ItemInstance(IdManager.getInstance().getNextId(), itemId); item.setCount(num); item.spawnMe(x, y, z + 5); ZoneManager.getInstance().getDebugItems().add(item);