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);