Fixed offline shops that are loaded after server startup.

Contributed by Sahar.
This commit is contained in:
MobiusDev
2018-06-18 23:03:33 +00:00
parent de2270ac8c
commit 88f35f9e87
48 changed files with 184 additions and 104 deletions
@@ -40,6 +40,7 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Collectors;
import com.l2jmobius.Config; import com.l2jmobius.Config;
import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.database.DatabaseFactory;
@@ -283,13 +284,9 @@ public class LoginServerThread extends Thread
st.addAttribute(ServerStatus.SERVER_AGE, ServerStatus.SERVER_AGE_ALL); st.addAttribute(ServerStatus.SERVER_AGE, ServerStatus.SERVER_AGE_ALL);
} }
sendPacket(st); sendPacket(st);
if (L2World.getInstance().getPlayers().size() > 0) final List<String> playerList = L2World.getInstance().getPlayers().stream().filter(player -> !player.isInStoreMode()).map(L2PcInstance::getAccountName).collect(Collectors.toList());
if (!playerList.isEmpty())
{ {
final List<String> playerList = new ArrayList<>();
for (L2PcInstance player : L2World.getInstance().getPlayers())
{
playerList.add(player.getAccountName());
}
sendPacket(new PlayerInGame(playerList)); sendPacket(new PlayerInGame(playerList));
} }
break; break;
@@ -26,7 +26,6 @@ import java.util.logging.Logger;
import com.l2jmobius.Config; import com.l2jmobius.Config;
import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.database.DatabaseFactory;
import com.l2jmobius.gameserver.LoginServerThread;
import com.l2jmobius.gameserver.enums.PrivateStoreType; import com.l2jmobius.gameserver.enums.PrivateStoreType;
import com.l2jmobius.gameserver.instancemanager.PlayerCountManager; import com.l2jmobius.gameserver.instancemanager.PlayerCountManager;
import com.l2jmobius.gameserver.model.L2ManufactureItem; import com.l2jmobius.gameserver.model.L2ManufactureItem;
@@ -232,7 +231,6 @@ public class OfflineTradersTable
} }
player.spawnMe(player.getX(), player.getY(), player.getZ()); player.spawnMe(player.getX(), player.getY(), player.getZ());
LoginServerThread.getInstance().addGameServerLogin(player.getAccountName(), client);
try (PreparedStatement stm_items = con.prepareStatement(LOAD_OFFLINE_ITEMS)) try (PreparedStatement stm_items = con.prepareStatement(LOAD_OFFLINE_ITEMS))
{ {
stm_items.setInt(1, player.getObjectId()); stm_items.setInt(1, player.getObjectId());
@@ -5779,7 +5779,8 @@ public final class L2PcInstance extends L2Playable
if (Config.OFFLINE_DISCONNECT_FINISHED && (privateStoreType == PrivateStoreType.NONE) && ((getClient() == null) || getClient().isDetached())) if (Config.OFFLINE_DISCONNECT_FINISHED && (privateStoreType == PrivateStoreType.NONE) && ((getClient() == null) || getClient().isDetached()))
{ {
deleteMe(); IdFactory.getInstance().releaseId(getObjectId());
Disconnection.of(this).storeMe().deleteMe();
} }
} }
@@ -120,10 +120,13 @@ public final class L2GameClient extends ChannelInboundHandler<L2GameClient>
LOGGER_ACCOUNTING.finer("Client Disconnected: " + ctx.channel()); LOGGER_ACCOUNTING.finer("Client Disconnected: " + ctx.channel());
LoginServerThread.getInstance().sendLogout(getAccountName()); LoginServerThread.getInstance().sendLogout(getAccountName());
IdFactory.getInstance().releaseId(getObjectId());
if ((_activeChar == null) || !_activeChar.isInStoreMode())
{
IdFactory.getInstance().releaseId(getObjectId());
Disconnection.of(this).onDisconnection(); Disconnection.of(this).onDisconnection();
} }
}
@Override @Override
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<L2GameClient> packet) protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<L2GameClient> packet)
@@ -29,11 +29,15 @@ import com.l2jmobius.commons.database.DatabaseFactory;
import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.commons.network.PacketWriter;
import com.l2jmobius.gameserver.data.sql.impl.ClanTable; import com.l2jmobius.gameserver.data.sql.impl.ClanTable;
import com.l2jmobius.gameserver.data.xml.impl.ExperienceData; import com.l2jmobius.gameserver.data.xml.impl.ExperienceData;
import com.l2jmobius.gameserver.idfactory.IdFactory;
import com.l2jmobius.gameserver.model.CharSelectInfoPackage; import com.l2jmobius.gameserver.model.CharSelectInfoPackage;
import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.L2Clan;
import com.l2jmobius.gameserver.model.L2World;
import com.l2jmobius.gameserver.model.VariationInstance; import com.l2jmobius.gameserver.model.VariationInstance;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.entity.Hero; import com.l2jmobius.gameserver.model.entity.Hero;
import com.l2jmobius.gameserver.model.itemcontainer.Inventory; import com.l2jmobius.gameserver.model.itemcontainer.Inventory;
import com.l2jmobius.gameserver.network.Disconnection;
import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.L2GameClient;
import com.l2jmobius.gameserver.network.OutgoingPackets; import com.l2jmobius.gameserver.network.OutgoingPackets;
@@ -233,6 +237,13 @@ public class CharSelectionInfo implements IClientOutgoingPacket
if (charInfopackage != null) if (charInfopackage != null)
{ {
characterList.add(charInfopackage); characterList.add(charInfopackage);
final L2PcInstance player = L2World.getInstance().getPlayer(charInfopackage.getObjectId());
if (player != null)
{
IdFactory.getInstance().releaseId(player.getObjectId());
Disconnection.of(player).storeMe().deleteMe();
}
} }
} }
} }
@@ -25,7 +25,6 @@ import com.l2jmobius.gameserver.model.actor.L2Summon;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.olympiad.OlympiadManager; import com.l2jmobius.gameserver.model.olympiad.OlympiadManager;
import com.l2jmobius.gameserver.model.zone.ZoneId; import com.l2jmobius.gameserver.model.zone.ZoneId;
import com.l2jmobius.gameserver.network.Disconnection;
import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.L2GameClient;
/** /**
@@ -104,6 +103,7 @@ public final class OfflineTradeUtil
PlayerCountManager.getInstance().incOfflineTradeCount(); PlayerCountManager.getInstance().incOfflineTradeCount();
final L2GameClient client = player.getClient(); final L2GameClient client = player.getClient();
client.close(true);
client.setDetached(true); client.setDetached(true);
player.leaveParty(); player.leaveParty();
@@ -147,7 +147,7 @@ public final class OfflineTradeUtil
OfflineTradersTable.onTransaction(player, false, true); OfflineTradersTable.onTransaction(player, false, true);
} }
Disconnection.of(player).storeMe().close(false); player.storeMe();
LOGGER_ACCOUNTING.info("Entering offline mode, " + client); LOGGER_ACCOUNTING.info("Entering offline mode, " + client);
return true; return true;
} }
@@ -40,6 +40,7 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Collectors;
import com.l2jmobius.Config; import com.l2jmobius.Config;
import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.database.DatabaseFactory;
@@ -283,13 +284,9 @@ public class LoginServerThread extends Thread
st.addAttribute(ServerStatus.SERVER_AGE, ServerStatus.SERVER_AGE_ALL); st.addAttribute(ServerStatus.SERVER_AGE, ServerStatus.SERVER_AGE_ALL);
} }
sendPacket(st); sendPacket(st);
if (L2World.getInstance().getPlayers().size() > 0) final List<String> playerList = L2World.getInstance().getPlayers().stream().filter(player -> !player.isInStoreMode()).map(L2PcInstance::getAccountName).collect(Collectors.toList());
if (!playerList.isEmpty())
{ {
final List<String> playerList = new ArrayList<>();
for (L2PcInstance player : L2World.getInstance().getPlayers())
{
playerList.add(player.getAccountName());
}
sendPacket(new PlayerInGame(playerList)); sendPacket(new PlayerInGame(playerList));
} }
break; break;
@@ -26,7 +26,6 @@ import java.util.logging.Logger;
import com.l2jmobius.Config; import com.l2jmobius.Config;
import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.database.DatabaseFactory;
import com.l2jmobius.gameserver.LoginServerThread;
import com.l2jmobius.gameserver.enums.PrivateStoreType; import com.l2jmobius.gameserver.enums.PrivateStoreType;
import com.l2jmobius.gameserver.instancemanager.PlayerCountManager; import com.l2jmobius.gameserver.instancemanager.PlayerCountManager;
import com.l2jmobius.gameserver.model.L2ManufactureItem; import com.l2jmobius.gameserver.model.L2ManufactureItem;
@@ -232,7 +231,6 @@ public class OfflineTradersTable
} }
player.spawnMe(player.getX(), player.getY(), player.getZ()); player.spawnMe(player.getX(), player.getY(), player.getZ());
LoginServerThread.getInstance().addGameServerLogin(player.getAccountName(), client);
try (PreparedStatement stm_items = con.prepareStatement(LOAD_OFFLINE_ITEMS)) try (PreparedStatement stm_items = con.prepareStatement(LOAD_OFFLINE_ITEMS))
{ {
stm_items.setInt(1, player.getObjectId()); stm_items.setInt(1, player.getObjectId());
@@ -5785,7 +5785,8 @@ public final class L2PcInstance extends L2Playable
if (Config.OFFLINE_DISCONNECT_FINISHED && (privateStoreType == PrivateStoreType.NONE) && ((getClient() == null) || getClient().isDetached())) if (Config.OFFLINE_DISCONNECT_FINISHED && (privateStoreType == PrivateStoreType.NONE) && ((getClient() == null) || getClient().isDetached()))
{ {
deleteMe(); IdFactory.getInstance().releaseId(getObjectId());
Disconnection.of(this).storeMe().deleteMe();
} }
} }
@@ -120,10 +120,13 @@ public final class L2GameClient extends ChannelInboundHandler<L2GameClient>
LOGGER_ACCOUNTING.finer("Client Disconnected: " + ctx.channel()); LOGGER_ACCOUNTING.finer("Client Disconnected: " + ctx.channel());
LoginServerThread.getInstance().sendLogout(getAccountName()); LoginServerThread.getInstance().sendLogout(getAccountName());
IdFactory.getInstance().releaseId(getObjectId());
if ((_activeChar == null) || !_activeChar.isInStoreMode())
{
IdFactory.getInstance().releaseId(getObjectId());
Disconnection.of(this).onDisconnection(); Disconnection.of(this).onDisconnection();
} }
}
@Override @Override
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<L2GameClient> packet) protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<L2GameClient> packet)
@@ -29,11 +29,15 @@ import com.l2jmobius.commons.database.DatabaseFactory;
import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.commons.network.PacketWriter;
import com.l2jmobius.gameserver.data.sql.impl.ClanTable; import com.l2jmobius.gameserver.data.sql.impl.ClanTable;
import com.l2jmobius.gameserver.data.xml.impl.ExperienceData; import com.l2jmobius.gameserver.data.xml.impl.ExperienceData;
import com.l2jmobius.gameserver.idfactory.IdFactory;
import com.l2jmobius.gameserver.model.CharSelectInfoPackage; import com.l2jmobius.gameserver.model.CharSelectInfoPackage;
import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.L2Clan;
import com.l2jmobius.gameserver.model.L2World;
import com.l2jmobius.gameserver.model.VariationInstance; import com.l2jmobius.gameserver.model.VariationInstance;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.entity.Hero; import com.l2jmobius.gameserver.model.entity.Hero;
import com.l2jmobius.gameserver.model.itemcontainer.Inventory; import com.l2jmobius.gameserver.model.itemcontainer.Inventory;
import com.l2jmobius.gameserver.network.Disconnection;
import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.L2GameClient;
import com.l2jmobius.gameserver.network.OutgoingPackets; import com.l2jmobius.gameserver.network.OutgoingPackets;
@@ -233,6 +237,13 @@ public class CharSelectionInfo implements IClientOutgoingPacket
if (charInfopackage != null) if (charInfopackage != null)
{ {
characterList.add(charInfopackage); characterList.add(charInfopackage);
final L2PcInstance player = L2World.getInstance().getPlayer(charInfopackage.getObjectId());
if (player != null)
{
IdFactory.getInstance().releaseId(player.getObjectId());
Disconnection.of(player).storeMe().deleteMe();
}
} }
} }
} }
@@ -25,7 +25,6 @@ import com.l2jmobius.gameserver.model.actor.L2Summon;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.olympiad.OlympiadManager; import com.l2jmobius.gameserver.model.olympiad.OlympiadManager;
import com.l2jmobius.gameserver.model.zone.ZoneId; import com.l2jmobius.gameserver.model.zone.ZoneId;
import com.l2jmobius.gameserver.network.Disconnection;
import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.L2GameClient;
/** /**
@@ -104,6 +103,7 @@ public final class OfflineTradeUtil
PlayerCountManager.getInstance().incOfflineTradeCount(); PlayerCountManager.getInstance().incOfflineTradeCount();
final L2GameClient client = player.getClient(); final L2GameClient client = player.getClient();
client.close(true);
client.setDetached(true); client.setDetached(true);
player.leaveParty(); player.leaveParty();
@@ -147,7 +147,7 @@ public final class OfflineTradeUtil
OfflineTradersTable.onTransaction(player, false, true); OfflineTradersTable.onTransaction(player, false, true);
} }
Disconnection.of(player).storeMe().close(false); player.storeMe();
LOGGER_ACCOUNTING.info("Entering offline mode, " + client); LOGGER_ACCOUNTING.info("Entering offline mode, " + client);
return true; return true;
} }
@@ -40,6 +40,7 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Collectors;
import com.l2jmobius.Config; import com.l2jmobius.Config;
import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.database.DatabaseFactory;
@@ -285,13 +286,9 @@ public class LoginServerThread extends Thread
st.addAttribute(ServerStatus.SERVER_AGE, ServerStatus.SERVER_AGE_ALL); st.addAttribute(ServerStatus.SERVER_AGE, ServerStatus.SERVER_AGE_ALL);
} }
sendPacket(st); sendPacket(st);
if (L2World.getInstance().getPlayers().size() > 0) final List<String> playerList = L2World.getInstance().getPlayers().stream().filter(player -> !player.isInStoreMode()).map(L2PcInstance::getAccountName).collect(Collectors.toList());
if (!playerList.isEmpty())
{ {
final List<String> playerList = new ArrayList<>();
for (L2PcInstance player : L2World.getInstance().getPlayers())
{
playerList.add(player.getAccountName());
}
sendPacket(new PlayerInGame(playerList)); sendPacket(new PlayerInGame(playerList));
} }
break; break;
@@ -26,7 +26,6 @@ import java.util.logging.Logger;
import com.l2jmobius.Config; import com.l2jmobius.Config;
import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.database.DatabaseFactory;
import com.l2jmobius.gameserver.LoginServerThread;
import com.l2jmobius.gameserver.enums.PrivateStoreType; import com.l2jmobius.gameserver.enums.PrivateStoreType;
import com.l2jmobius.gameserver.instancemanager.PlayerCountManager; import com.l2jmobius.gameserver.instancemanager.PlayerCountManager;
import com.l2jmobius.gameserver.model.L2ManufactureItem; import com.l2jmobius.gameserver.model.L2ManufactureItem;
@@ -232,7 +231,6 @@ public class OfflineTradersTable
} }
player.spawnMe(player.getX(), player.getY(), player.getZ()); player.spawnMe(player.getX(), player.getY(), player.getZ());
LoginServerThread.getInstance().addGameServerLogin(player.getAccountName(), client);
try (PreparedStatement stm_items = con.prepareStatement(LOAD_OFFLINE_ITEMS)) try (PreparedStatement stm_items = con.prepareStatement(LOAD_OFFLINE_ITEMS))
{ {
stm_items.setInt(1, player.getObjectId()); stm_items.setInt(1, player.getObjectId());
@@ -5787,7 +5787,8 @@ public final class L2PcInstance extends L2Playable
if (Config.OFFLINE_DISCONNECT_FINISHED && (privateStoreType == PrivateStoreType.NONE) && ((getClient() == null) || getClient().isDetached())) if (Config.OFFLINE_DISCONNECT_FINISHED && (privateStoreType == PrivateStoreType.NONE) && ((getClient() == null) || getClient().isDetached()))
{ {
deleteMe(); IdFactory.getInstance().releaseId(getObjectId());
Disconnection.of(this).storeMe().deleteMe();
} }
} }
@@ -120,10 +120,13 @@ public final class L2GameClient extends ChannelInboundHandler<L2GameClient>
LOGGER_ACCOUNTING.finer("Client Disconnected: " + ctx.channel()); LOGGER_ACCOUNTING.finer("Client Disconnected: " + ctx.channel());
LoginServerThread.getInstance().sendLogout(getAccountName()); LoginServerThread.getInstance().sendLogout(getAccountName());
IdFactory.getInstance().releaseId(getObjectId());
if ((_activeChar == null) || !_activeChar.isInStoreMode())
{
IdFactory.getInstance().releaseId(getObjectId());
Disconnection.of(this).onDisconnection(); Disconnection.of(this).onDisconnection();
} }
}
@Override @Override
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<L2GameClient> packet) protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<L2GameClient> packet)
@@ -29,11 +29,15 @@ import com.l2jmobius.commons.database.DatabaseFactory;
import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.commons.network.PacketWriter;
import com.l2jmobius.gameserver.data.sql.impl.ClanTable; import com.l2jmobius.gameserver.data.sql.impl.ClanTable;
import com.l2jmobius.gameserver.data.xml.impl.ExperienceData; import com.l2jmobius.gameserver.data.xml.impl.ExperienceData;
import com.l2jmobius.gameserver.idfactory.IdFactory;
import com.l2jmobius.gameserver.model.CharSelectInfoPackage; import com.l2jmobius.gameserver.model.CharSelectInfoPackage;
import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.L2Clan;
import com.l2jmobius.gameserver.model.L2World;
import com.l2jmobius.gameserver.model.VariationInstance; import com.l2jmobius.gameserver.model.VariationInstance;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.entity.Hero; import com.l2jmobius.gameserver.model.entity.Hero;
import com.l2jmobius.gameserver.model.itemcontainer.Inventory; import com.l2jmobius.gameserver.model.itemcontainer.Inventory;
import com.l2jmobius.gameserver.network.Disconnection;
import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.L2GameClient;
import com.l2jmobius.gameserver.network.OutgoingPackets; import com.l2jmobius.gameserver.network.OutgoingPackets;
@@ -234,6 +238,13 @@ public class CharSelectionInfo implements IClientOutgoingPacket
if (charInfopackage != null) if (charInfopackage != null)
{ {
characterList.add(charInfopackage); characterList.add(charInfopackage);
final L2PcInstance player = L2World.getInstance().getPlayer(charInfopackage.getObjectId());
if (player != null)
{
IdFactory.getInstance().releaseId(player.getObjectId());
Disconnection.of(player).storeMe().deleteMe();
}
} }
} }
} }
@@ -25,7 +25,6 @@ import com.l2jmobius.gameserver.model.actor.L2Summon;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.olympiad.OlympiadManager; import com.l2jmobius.gameserver.model.olympiad.OlympiadManager;
import com.l2jmobius.gameserver.model.zone.ZoneId; import com.l2jmobius.gameserver.model.zone.ZoneId;
import com.l2jmobius.gameserver.network.Disconnection;
import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.L2GameClient;
/** /**
@@ -104,6 +103,7 @@ public final class OfflineTradeUtil
PlayerCountManager.getInstance().incOfflineTradeCount(); PlayerCountManager.getInstance().incOfflineTradeCount();
final L2GameClient client = player.getClient(); final L2GameClient client = player.getClient();
client.close(true);
client.setDetached(true); client.setDetached(true);
player.leaveParty(); player.leaveParty();
@@ -147,7 +147,7 @@ public final class OfflineTradeUtil
OfflineTradersTable.onTransaction(player, false, true); OfflineTradersTable.onTransaction(player, false, true);
} }
Disconnection.of(player).storeMe().close(false); player.storeMe();
LOGGER_ACCOUNTING.info("Entering offline mode, " + client); LOGGER_ACCOUNTING.info("Entering offline mode, " + client);
return true; return true;
} }
@@ -40,6 +40,7 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Collectors;
import com.l2jmobius.Config; import com.l2jmobius.Config;
import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.database.DatabaseFactory;
@@ -285,13 +286,9 @@ public class LoginServerThread extends Thread
st.addAttribute(ServerStatus.SERVER_AGE, ServerStatus.SERVER_AGE_ALL); st.addAttribute(ServerStatus.SERVER_AGE, ServerStatus.SERVER_AGE_ALL);
} }
sendPacket(st); sendPacket(st);
if (L2World.getInstance().getPlayers().size() > 0) final List<String> playerList = L2World.getInstance().getPlayers().stream().filter(player -> !player.isInStoreMode()).map(L2PcInstance::getAccountName).collect(Collectors.toList());
if (!playerList.isEmpty())
{ {
final List<String> playerList = new ArrayList<>();
for (L2PcInstance player : L2World.getInstance().getPlayers())
{
playerList.add(player.getAccountName());
}
sendPacket(new PlayerInGame(playerList)); sendPacket(new PlayerInGame(playerList));
} }
break; break;
@@ -29,7 +29,6 @@ import java.util.logging.Logger;
import com.l2jmobius.Config; import com.l2jmobius.Config;
import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.database.DatabaseFactory;
import com.l2jmobius.gameserver.LoginServerThread;
import com.l2jmobius.gameserver.enums.PrivateStoreType; import com.l2jmobius.gameserver.enums.PrivateStoreType;
import com.l2jmobius.gameserver.instancemanager.PlayerCountManager; import com.l2jmobius.gameserver.instancemanager.PlayerCountManager;
import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.L2World;
@@ -234,7 +233,6 @@ public class OfflineTradersTable
} }
player.spawnMe(player.getX(), player.getY(), player.getZ()); player.spawnMe(player.getX(), player.getY(), player.getZ());
LoginServerThread.getInstance().addGameServerLogin(player.getAccountName(), client);
try (PreparedStatement stm_items = con.prepareStatement(LOAD_OFFLINE_ITEMS)) try (PreparedStatement stm_items = con.prepareStatement(LOAD_OFFLINE_ITEMS))
{ {
stm_items.setInt(1, player.getObjectId()); stm_items.setInt(1, player.getObjectId());
@@ -5784,7 +5784,8 @@ public final class L2PcInstance extends L2Playable
if (Config.OFFLINE_DISCONNECT_FINISHED && (privateStoreType == PrivateStoreType.NONE) && ((getClient() == null) || getClient().isDetached())) if (Config.OFFLINE_DISCONNECT_FINISHED && (privateStoreType == PrivateStoreType.NONE) && ((getClient() == null) || getClient().isDetached()))
{ {
deleteMe(); IdFactory.getInstance().releaseId(getObjectId());
Disconnection.of(this).storeMe().deleteMe();
} }
} }
@@ -120,10 +120,13 @@ public final class L2GameClient extends ChannelInboundHandler<L2GameClient>
LOGGER_ACCOUNTING.finer("Client Disconnected: " + ctx.channel()); LOGGER_ACCOUNTING.finer("Client Disconnected: " + ctx.channel());
LoginServerThread.getInstance().sendLogout(getAccountName()); LoginServerThread.getInstance().sendLogout(getAccountName());
IdFactory.getInstance().releaseId(getObjectId());
if ((_activeChar == null) || !_activeChar.isInStoreMode())
{
IdFactory.getInstance().releaseId(getObjectId());
Disconnection.of(this).onDisconnection(); Disconnection.of(this).onDisconnection();
} }
}
@Override @Override
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<L2GameClient> packet) protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<L2GameClient> packet)
@@ -29,11 +29,15 @@ import com.l2jmobius.commons.database.DatabaseFactory;
import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.commons.network.PacketWriter;
import com.l2jmobius.gameserver.data.sql.impl.ClanTable; import com.l2jmobius.gameserver.data.sql.impl.ClanTable;
import com.l2jmobius.gameserver.data.xml.impl.ExperienceData; import com.l2jmobius.gameserver.data.xml.impl.ExperienceData;
import com.l2jmobius.gameserver.idfactory.IdFactory;
import com.l2jmobius.gameserver.model.CharSelectInfoPackage; import com.l2jmobius.gameserver.model.CharSelectInfoPackage;
import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.L2Clan;
import com.l2jmobius.gameserver.model.L2World;
import com.l2jmobius.gameserver.model.VariationInstance; import com.l2jmobius.gameserver.model.VariationInstance;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.entity.Hero; import com.l2jmobius.gameserver.model.entity.Hero;
import com.l2jmobius.gameserver.model.itemcontainer.Inventory; import com.l2jmobius.gameserver.model.itemcontainer.Inventory;
import com.l2jmobius.gameserver.network.Disconnection;
import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.L2GameClient;
import com.l2jmobius.gameserver.network.OutgoingPackets; import com.l2jmobius.gameserver.network.OutgoingPackets;
@@ -234,6 +238,13 @@ public class CharSelectionInfo implements IClientOutgoingPacket
if (charInfopackage != null) if (charInfopackage != null)
{ {
characterList.add(charInfopackage); characterList.add(charInfopackage);
final L2PcInstance player = L2World.getInstance().getPlayer(charInfopackage.getObjectId());
if (player != null)
{
IdFactory.getInstance().releaseId(player.getObjectId());
Disconnection.of(player).storeMe().deleteMe();
}
} }
} }
} }
@@ -25,7 +25,6 @@ import com.l2jmobius.gameserver.model.actor.L2Summon;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.olympiad.OlympiadManager; import com.l2jmobius.gameserver.model.olympiad.OlympiadManager;
import com.l2jmobius.gameserver.model.zone.ZoneId; import com.l2jmobius.gameserver.model.zone.ZoneId;
import com.l2jmobius.gameserver.network.Disconnection;
import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.L2GameClient;
/** /**
@@ -104,6 +103,7 @@ public final class OfflineTradeUtil
PlayerCountManager.getInstance().incOfflineTradeCount(); PlayerCountManager.getInstance().incOfflineTradeCount();
final L2GameClient client = player.getClient(); final L2GameClient client = player.getClient();
client.close(true);
client.setDetached(true); client.setDetached(true);
player.leaveParty(); player.leaveParty();
@@ -147,7 +147,7 @@ public final class OfflineTradeUtil
OfflineTradersTable.onTransaction(player, false, true); OfflineTradersTable.onTransaction(player, false, true);
} }
Disconnection.of(player).storeMe().close(false); player.storeMe();
LOGGER_ACCOUNTING.info("Entering offline mode, " + client); LOGGER_ACCOUNTING.info("Entering offline mode, " + client);
return true; return true;
} }
@@ -40,6 +40,7 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Collectors;
import com.l2jmobius.Config; import com.l2jmobius.Config;
import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.database.DatabaseFactory;
@@ -283,13 +284,9 @@ public class LoginServerThread extends Thread
st.addAttribute(ServerStatus.SERVER_AGE, ServerStatus.SERVER_AGE_ALL); st.addAttribute(ServerStatus.SERVER_AGE, ServerStatus.SERVER_AGE_ALL);
} }
sendPacket(st); sendPacket(st);
if (L2World.getInstance().getPlayers().size() > 0) final List<String> playerList = L2World.getInstance().getPlayers().stream().filter(player -> !player.isInOfflineMode()).map(L2PcInstance::getAccountName).collect(Collectors.toList());
if (!playerList.isEmpty())
{ {
final List<String> playerList = new ArrayList<>();
for (L2PcInstance player : L2World.getInstance().getPlayers())
{
playerList.add(player.getAccountName());
}
sendPacket(new PlayerInGame(playerList)); sendPacket(new PlayerInGame(playerList));
} }
break; break;
@@ -26,7 +26,6 @@ import java.util.logging.Logger;
import com.l2jmobius.Config; import com.l2jmobius.Config;
import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.database.DatabaseFactory;
import com.l2jmobius.gameserver.LoginServerThread;
import com.l2jmobius.gameserver.enums.PrivateStoreType; import com.l2jmobius.gameserver.enums.PrivateStoreType;
import com.l2jmobius.gameserver.instancemanager.PlayerCountManager; import com.l2jmobius.gameserver.instancemanager.PlayerCountManager;
import com.l2jmobius.gameserver.model.L2ManufactureItem; import com.l2jmobius.gameserver.model.L2ManufactureItem;
@@ -232,7 +231,6 @@ public class OfflineTradersTable
} }
player.spawnMe(player.getX(), player.getY(), player.getZ()); player.spawnMe(player.getX(), player.getY(), player.getZ());
LoginServerThread.getInstance().addGameServerLogin(player.getAccountName(), client);
try (PreparedStatement stm_items = con.prepareStatement(LOAD_OFFLINE_ITEMS)) try (PreparedStatement stm_items = con.prepareStatement(LOAD_OFFLINE_ITEMS))
{ {
stm_items.setInt(1, player.getObjectId()); stm_items.setInt(1, player.getObjectId());
@@ -5929,7 +5929,8 @@ public final class L2PcInstance extends L2Playable
if (Config.OFFLINE_DISCONNECT_FINISHED && (privateStoreType == PrivateStoreType.NONE) && ((getClient() == null) || getClient().isDetached())) if (Config.OFFLINE_DISCONNECT_FINISHED && (privateStoreType == PrivateStoreType.NONE) && ((getClient() == null) || getClient().isDetached()))
{ {
deleteMe(); IdFactory.getInstance().releaseId(getObjectId());
Disconnection.of(this).storeMe().deleteMe();
} }
} }
@@ -115,10 +115,13 @@ public final class L2GameClient extends ChannelInboundHandler<L2GameClient>
LOGGER_ACCOUNTING.finer("Client Disconnected: " + ctx.channel()); LOGGER_ACCOUNTING.finer("Client Disconnected: " + ctx.channel());
LoginServerThread.getInstance().sendLogout(getAccountName()); LoginServerThread.getInstance().sendLogout(getAccountName());
IdFactory.getInstance().releaseId(getObjectId());
if ((_activeChar == null) || !_activeChar.isInOfflineMode())
{
IdFactory.getInstance().releaseId(getObjectId());
Disconnection.of(this).onDisconnection(); Disconnection.of(this).onDisconnection();
} }
}
@Override @Override
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<L2GameClient> packet) protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<L2GameClient> packet)
@@ -29,9 +29,13 @@ import com.l2jmobius.commons.database.DatabaseFactory;
import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.commons.network.PacketWriter;
import com.l2jmobius.gameserver.data.sql.impl.ClanTable; import com.l2jmobius.gameserver.data.sql.impl.ClanTable;
import com.l2jmobius.gameserver.data.xml.impl.ExperienceData; import com.l2jmobius.gameserver.data.xml.impl.ExperienceData;
import com.l2jmobius.gameserver.idfactory.IdFactory;
import com.l2jmobius.gameserver.model.CharSelectInfoPackage; import com.l2jmobius.gameserver.model.CharSelectInfoPackage;
import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.L2Clan;
import com.l2jmobius.gameserver.model.L2World;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.itemcontainer.Inventory; import com.l2jmobius.gameserver.model.itemcontainer.Inventory;
import com.l2jmobius.gameserver.network.Disconnection;
import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.L2GameClient;
import com.l2jmobius.gameserver.network.OutgoingPackets; import com.l2jmobius.gameserver.network.OutgoingPackets;
@@ -186,6 +190,13 @@ public class CharSelectionInfo implements IClientOutgoingPacket
if (charInfopackage != null) if (charInfopackage != null)
{ {
characterList.add(charInfopackage); characterList.add(charInfopackage);
final L2PcInstance player = L2World.getInstance().getPlayer(charInfopackage.getObjectId());
if (player != null)
{
IdFactory.getInstance().releaseId(player.getObjectId());
Disconnection.of(player).storeMe().deleteMe();
}
} }
} }
} }
@@ -25,7 +25,6 @@ import com.l2jmobius.gameserver.model.actor.L2Summon;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.olympiad.OlympiadManager; import com.l2jmobius.gameserver.model.olympiad.OlympiadManager;
import com.l2jmobius.gameserver.model.zone.ZoneId; import com.l2jmobius.gameserver.model.zone.ZoneId;
import com.l2jmobius.gameserver.network.Disconnection;
import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.L2GameClient;
/** /**
@@ -104,6 +103,7 @@ public final class OfflineTradeUtil
PlayerCountManager.getInstance().incOfflineTradeCount(); PlayerCountManager.getInstance().incOfflineTradeCount();
final L2GameClient client = player.getClient(); final L2GameClient client = player.getClient();
client.close(true);
client.setDetached(true); client.setDetached(true);
player.leaveParty(); player.leaveParty();
@@ -141,7 +141,7 @@ public final class OfflineTradeUtil
OfflineTradersTable.onTransaction(player, false, true); OfflineTradersTable.onTransaction(player, false, true);
} }
Disconnection.of(player).storeMe().close(false); player.storeMe();
LOGGER_ACCOUNTING.info("Entering offline mode, " + client); LOGGER_ACCOUNTING.info("Entering offline mode, " + client);
return true; return true;
} }
@@ -40,6 +40,7 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Collectors;
import com.l2jmobius.Config; import com.l2jmobius.Config;
import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.database.DatabaseFactory;
@@ -285,13 +286,9 @@ public class LoginServerThread extends Thread
st.addAttribute(ServerStatus.SERVER_AGE, ServerStatus.SERVER_AGE_ALL); st.addAttribute(ServerStatus.SERVER_AGE, ServerStatus.SERVER_AGE_ALL);
} }
sendPacket(st); sendPacket(st);
if (L2World.getInstance().getPlayers().size() > 0) final List<String> playerList = L2World.getInstance().getPlayers().stream().filter(player -> !player.isInStoreMode()).map(L2PcInstance::getAccountName).collect(Collectors.toList());
if (!playerList.isEmpty())
{ {
final List<String> playerList = new ArrayList<>();
for (L2PcInstance player : L2World.getInstance().getPlayers())
{
playerList.add(player.getAccountName());
}
sendPacket(new PlayerInGame(playerList)); sendPacket(new PlayerInGame(playerList));
} }
break; break;
@@ -26,7 +26,6 @@ import java.util.logging.Logger;
import com.l2jmobius.Config; import com.l2jmobius.Config;
import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.database.DatabaseFactory;
import com.l2jmobius.gameserver.LoginServerThread;
import com.l2jmobius.gameserver.enums.PrivateStoreType; import com.l2jmobius.gameserver.enums.PrivateStoreType;
import com.l2jmobius.gameserver.instancemanager.PlayerCountManager; import com.l2jmobius.gameserver.instancemanager.PlayerCountManager;
import com.l2jmobius.gameserver.model.L2ManufactureItem; import com.l2jmobius.gameserver.model.L2ManufactureItem;
@@ -232,7 +231,6 @@ public class OfflineTradersTable
} }
player.spawnMe(player.getX(), player.getY(), player.getZ()); player.spawnMe(player.getX(), player.getY(), player.getZ());
LoginServerThread.getInstance().addGameServerLogin(player.getAccountName(), client);
try (PreparedStatement stm_items = con.prepareStatement(LOAD_OFFLINE_ITEMS)) try (PreparedStatement stm_items = con.prepareStatement(LOAD_OFFLINE_ITEMS))
{ {
stm_items.setInt(1, player.getObjectId()); stm_items.setInt(1, player.getObjectId());
@@ -5751,7 +5751,8 @@ public final class L2PcInstance extends L2Playable
if (Config.OFFLINE_DISCONNECT_FINISHED && (privateStoreType == PrivateStoreType.NONE) && ((getClient() == null) || getClient().isDetached())) if (Config.OFFLINE_DISCONNECT_FINISHED && (privateStoreType == PrivateStoreType.NONE) && ((getClient() == null) || getClient().isDetached()))
{ {
deleteMe(); IdFactory.getInstance().releaseId(getObjectId());
Disconnection.of(this).storeMe().deleteMe();
} }
} }
@@ -120,10 +120,13 @@ public final class L2GameClient extends ChannelInboundHandler<L2GameClient>
LOGGER_ACCOUNTING.finer("Client Disconnected: " + ctx.channel()); LOGGER_ACCOUNTING.finer("Client Disconnected: " + ctx.channel());
LoginServerThread.getInstance().sendLogout(getAccountName()); LoginServerThread.getInstance().sendLogout(getAccountName());
IdFactory.getInstance().releaseId(getObjectId());
if ((_activeChar == null) || !_activeChar.isInStoreMode())
{
IdFactory.getInstance().releaseId(getObjectId());
Disconnection.of(this).onDisconnection(); Disconnection.of(this).onDisconnection();
} }
}
@Override @Override
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<L2GameClient> packet) protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<L2GameClient> packet)
@@ -29,11 +29,15 @@ import com.l2jmobius.commons.database.DatabaseFactory;
import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.commons.network.PacketWriter;
import com.l2jmobius.gameserver.data.sql.impl.ClanTable; import com.l2jmobius.gameserver.data.sql.impl.ClanTable;
import com.l2jmobius.gameserver.data.xml.impl.ExperienceData; import com.l2jmobius.gameserver.data.xml.impl.ExperienceData;
import com.l2jmobius.gameserver.idfactory.IdFactory;
import com.l2jmobius.gameserver.model.CharSelectInfoPackage; import com.l2jmobius.gameserver.model.CharSelectInfoPackage;
import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.L2Clan;
import com.l2jmobius.gameserver.model.L2World;
import com.l2jmobius.gameserver.model.VariationInstance; import com.l2jmobius.gameserver.model.VariationInstance;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.entity.Hero; import com.l2jmobius.gameserver.model.entity.Hero;
import com.l2jmobius.gameserver.model.itemcontainer.Inventory; import com.l2jmobius.gameserver.model.itemcontainer.Inventory;
import com.l2jmobius.gameserver.network.Disconnection;
import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.L2GameClient;
import com.l2jmobius.gameserver.network.OutgoingPackets; import com.l2jmobius.gameserver.network.OutgoingPackets;
@@ -234,6 +238,13 @@ public class CharSelectionInfo implements IClientOutgoingPacket
if (charInfopackage != null) if (charInfopackage != null)
{ {
characterList.add(charInfopackage); characterList.add(charInfopackage);
final L2PcInstance player = L2World.getInstance().getPlayer(charInfopackage.getObjectId());
if (player != null)
{
IdFactory.getInstance().releaseId(player.getObjectId());
Disconnection.of(player).storeMe().deleteMe();
}
} }
} }
} }
@@ -25,7 +25,6 @@ import com.l2jmobius.gameserver.model.actor.L2Summon;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.olympiad.OlympiadManager; import com.l2jmobius.gameserver.model.olympiad.OlympiadManager;
import com.l2jmobius.gameserver.model.zone.ZoneId; import com.l2jmobius.gameserver.model.zone.ZoneId;
import com.l2jmobius.gameserver.network.Disconnection;
import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.L2GameClient;
/** /**
@@ -104,6 +103,7 @@ public final class OfflineTradeUtil
PlayerCountManager.getInstance().incOfflineTradeCount(); PlayerCountManager.getInstance().incOfflineTradeCount();
final L2GameClient client = player.getClient(); final L2GameClient client = player.getClient();
client.close(true);
client.setDetached(true); client.setDetached(true);
player.leaveParty(); player.leaveParty();
@@ -147,7 +147,7 @@ public final class OfflineTradeUtil
OfflineTradersTable.onTransaction(player, false, true); OfflineTradersTable.onTransaction(player, false, true);
} }
Disconnection.of(player).storeMe().close(false); player.storeMe();
LOGGER_ACCOUNTING.info("Entering offline mode, " + client); LOGGER_ACCOUNTING.info("Entering offline mode, " + client);
return true; return true;
} }
@@ -40,6 +40,7 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Collectors;
import com.l2jmobius.Config; import com.l2jmobius.Config;
import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.database.DatabaseFactory;
@@ -285,13 +286,9 @@ public class LoginServerThread extends Thread
st.addAttribute(ServerStatus.SERVER_AGE, ServerStatus.SERVER_AGE_ALL); st.addAttribute(ServerStatus.SERVER_AGE, ServerStatus.SERVER_AGE_ALL);
} }
sendPacket(st); sendPacket(st);
if (L2World.getInstance().getPlayers().size() > 0) final List<String> playerList = L2World.getInstance().getPlayers().stream().filter(player -> !player.isInStoreMode()).map(L2PcInstance::getAccountName).collect(Collectors.toList());
if (!playerList.isEmpty())
{ {
final List<String> playerList = new ArrayList<>();
for (L2PcInstance player : L2World.getInstance().getPlayers())
{
playerList.add(player.getAccountName());
}
sendPacket(new PlayerInGame(playerList)); sendPacket(new PlayerInGame(playerList));
} }
break; break;
@@ -26,7 +26,6 @@ import java.util.logging.Logger;
import com.l2jmobius.Config; import com.l2jmobius.Config;
import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.database.DatabaseFactory;
import com.l2jmobius.gameserver.LoginServerThread;
import com.l2jmobius.gameserver.enums.PrivateStoreType; import com.l2jmobius.gameserver.enums.PrivateStoreType;
import com.l2jmobius.gameserver.instancemanager.PlayerCountManager; import com.l2jmobius.gameserver.instancemanager.PlayerCountManager;
import com.l2jmobius.gameserver.model.L2ManufactureItem; import com.l2jmobius.gameserver.model.L2ManufactureItem;
@@ -232,7 +231,6 @@ public class OfflineTradersTable
} }
player.spawnMe(player.getX(), player.getY(), player.getZ()); player.spawnMe(player.getX(), player.getY(), player.getZ());
LoginServerThread.getInstance().addGameServerLogin(player.getAccountName(), client);
try (PreparedStatement stm_items = con.prepareStatement(LOAD_OFFLINE_ITEMS)) try (PreparedStatement stm_items = con.prepareStatement(LOAD_OFFLINE_ITEMS))
{ {
stm_items.setInt(1, player.getObjectId()); stm_items.setInt(1, player.getObjectId());
@@ -5751,7 +5751,8 @@ public final class L2PcInstance extends L2Playable
if (Config.OFFLINE_DISCONNECT_FINISHED && (privateStoreType == PrivateStoreType.NONE) && ((getClient() == null) || getClient().isDetached())) if (Config.OFFLINE_DISCONNECT_FINISHED && (privateStoreType == PrivateStoreType.NONE) && ((getClient() == null) || getClient().isDetached()))
{ {
deleteMe(); IdFactory.getInstance().releaseId(getObjectId());
Disconnection.of(this).storeMe().deleteMe();
} }
} }
@@ -120,10 +120,13 @@ public final class L2GameClient extends ChannelInboundHandler<L2GameClient>
LOGGER_ACCOUNTING.finer("Client Disconnected: " + ctx.channel()); LOGGER_ACCOUNTING.finer("Client Disconnected: " + ctx.channel());
LoginServerThread.getInstance().sendLogout(getAccountName()); LoginServerThread.getInstance().sendLogout(getAccountName());
IdFactory.getInstance().releaseId(getObjectId());
if ((_activeChar == null) || !_activeChar.isInStoreMode())
{
IdFactory.getInstance().releaseId(getObjectId());
Disconnection.of(this).onDisconnection(); Disconnection.of(this).onDisconnection();
} }
}
@Override @Override
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<L2GameClient> packet) protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<L2GameClient> packet)
@@ -29,11 +29,15 @@ import com.l2jmobius.commons.database.DatabaseFactory;
import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.commons.network.PacketWriter;
import com.l2jmobius.gameserver.data.sql.impl.ClanTable; import com.l2jmobius.gameserver.data.sql.impl.ClanTable;
import com.l2jmobius.gameserver.data.xml.impl.ExperienceData; import com.l2jmobius.gameserver.data.xml.impl.ExperienceData;
import com.l2jmobius.gameserver.idfactory.IdFactory;
import com.l2jmobius.gameserver.model.CharSelectInfoPackage; import com.l2jmobius.gameserver.model.CharSelectInfoPackage;
import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.L2Clan;
import com.l2jmobius.gameserver.model.L2World;
import com.l2jmobius.gameserver.model.VariationInstance; import com.l2jmobius.gameserver.model.VariationInstance;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.entity.Hero; import com.l2jmobius.gameserver.model.entity.Hero;
import com.l2jmobius.gameserver.model.itemcontainer.Inventory; import com.l2jmobius.gameserver.model.itemcontainer.Inventory;
import com.l2jmobius.gameserver.network.Disconnection;
import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.L2GameClient;
import com.l2jmobius.gameserver.network.OutgoingPackets; import com.l2jmobius.gameserver.network.OutgoingPackets;
@@ -234,6 +238,13 @@ public class CharSelectionInfo implements IClientOutgoingPacket
if (charInfopackage != null) if (charInfopackage != null)
{ {
characterList.add(charInfopackage); characterList.add(charInfopackage);
final L2PcInstance player = L2World.getInstance().getPlayer(charInfopackage.getObjectId());
if (player != null)
{
IdFactory.getInstance().releaseId(player.getObjectId());
Disconnection.of(player).storeMe().deleteMe();
}
} }
} }
} }
@@ -25,7 +25,6 @@ import com.l2jmobius.gameserver.model.actor.L2Summon;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.olympiad.OlympiadManager; import com.l2jmobius.gameserver.model.olympiad.OlympiadManager;
import com.l2jmobius.gameserver.model.zone.ZoneId; import com.l2jmobius.gameserver.model.zone.ZoneId;
import com.l2jmobius.gameserver.network.Disconnection;
import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.L2GameClient;
/** /**
@@ -104,6 +103,7 @@ public final class OfflineTradeUtil
PlayerCountManager.getInstance().incOfflineTradeCount(); PlayerCountManager.getInstance().incOfflineTradeCount();
final L2GameClient client = player.getClient(); final L2GameClient client = player.getClient();
client.close(true);
client.setDetached(true); client.setDetached(true);
player.leaveParty(); player.leaveParty();
@@ -147,7 +147,7 @@ public final class OfflineTradeUtil
OfflineTradersTable.onTransaction(player, false, true); OfflineTradersTable.onTransaction(player, false, true);
} }
Disconnection.of(player).storeMe().close(false); player.storeMe();
LOGGER_ACCOUNTING.info("Entering offline mode, " + client); LOGGER_ACCOUNTING.info("Entering offline mode, " + client);
return true; return true;
} }
@@ -40,6 +40,7 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Collectors;
import com.l2jmobius.Config; import com.l2jmobius.Config;
import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.database.DatabaseFactory;
@@ -285,13 +286,9 @@ public class LoginServerThread extends Thread
st.addAttribute(ServerStatus.SERVER_AGE, ServerStatus.SERVER_AGE_ALL); st.addAttribute(ServerStatus.SERVER_AGE, ServerStatus.SERVER_AGE_ALL);
} }
sendPacket(st); sendPacket(st);
if (L2World.getInstance().getPlayers().size() > 0) final List<String> playerList = L2World.getInstance().getPlayers().stream().filter(player -> !player.isInStoreMode()).map(L2PcInstance::getAccountName).collect(Collectors.toList());
if (!playerList.isEmpty())
{ {
final List<String> playerList = new ArrayList<>();
for (L2PcInstance player : L2World.getInstance().getPlayers())
{
playerList.add(player.getAccountName());
}
sendPacket(new PlayerInGame(playerList)); sendPacket(new PlayerInGame(playerList));
} }
break; break;
@@ -26,7 +26,6 @@ import java.util.logging.Logger;
import com.l2jmobius.Config; import com.l2jmobius.Config;
import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.database.DatabaseFactory;
import com.l2jmobius.gameserver.LoginServerThread;
import com.l2jmobius.gameserver.enums.PrivateStoreType; import com.l2jmobius.gameserver.enums.PrivateStoreType;
import com.l2jmobius.gameserver.instancemanager.PlayerCountManager; import com.l2jmobius.gameserver.instancemanager.PlayerCountManager;
import com.l2jmobius.gameserver.model.L2ManufactureItem; import com.l2jmobius.gameserver.model.L2ManufactureItem;
@@ -232,7 +231,6 @@ public class OfflineTradersTable
} }
player.spawnMe(player.getX(), player.getY(), player.getZ()); player.spawnMe(player.getX(), player.getY(), player.getZ());
LoginServerThread.getInstance().addGameServerLogin(player.getAccountName(), client);
try (PreparedStatement stm_items = con.prepareStatement(LOAD_OFFLINE_ITEMS)) try (PreparedStatement stm_items = con.prepareStatement(LOAD_OFFLINE_ITEMS))
{ {
stm_items.setInt(1, player.getObjectId()); stm_items.setInt(1, player.getObjectId());
@@ -5753,7 +5753,8 @@ public final class L2PcInstance extends L2Playable
if (Config.OFFLINE_DISCONNECT_FINISHED && (privateStoreType == PrivateStoreType.NONE) && ((getClient() == null) || getClient().isDetached())) if (Config.OFFLINE_DISCONNECT_FINISHED && (privateStoreType == PrivateStoreType.NONE) && ((getClient() == null) || getClient().isDetached()))
{ {
deleteMe(); IdFactory.getInstance().releaseId(getObjectId());
Disconnection.of(this).storeMe().deleteMe();
} }
} }
@@ -120,10 +120,13 @@ public final class L2GameClient extends ChannelInboundHandler<L2GameClient>
LOGGER_ACCOUNTING.finer("Client Disconnected: " + ctx.channel()); LOGGER_ACCOUNTING.finer("Client Disconnected: " + ctx.channel());
LoginServerThread.getInstance().sendLogout(getAccountName()); LoginServerThread.getInstance().sendLogout(getAccountName());
IdFactory.getInstance().releaseId(getObjectId());
if ((_activeChar == null) || !_activeChar.isInStoreMode())
{
IdFactory.getInstance().releaseId(getObjectId());
Disconnection.of(this).onDisconnection(); Disconnection.of(this).onDisconnection();
} }
}
@Override @Override
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<L2GameClient> packet) protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<L2GameClient> packet)
@@ -29,11 +29,15 @@ import com.l2jmobius.commons.database.DatabaseFactory;
import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.commons.network.PacketWriter;
import com.l2jmobius.gameserver.data.sql.impl.ClanTable; import com.l2jmobius.gameserver.data.sql.impl.ClanTable;
import com.l2jmobius.gameserver.data.xml.impl.ExperienceData; import com.l2jmobius.gameserver.data.xml.impl.ExperienceData;
import com.l2jmobius.gameserver.idfactory.IdFactory;
import com.l2jmobius.gameserver.model.CharSelectInfoPackage; import com.l2jmobius.gameserver.model.CharSelectInfoPackage;
import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.L2Clan;
import com.l2jmobius.gameserver.model.L2World;
import com.l2jmobius.gameserver.model.VariationInstance; import com.l2jmobius.gameserver.model.VariationInstance;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.entity.Hero; import com.l2jmobius.gameserver.model.entity.Hero;
import com.l2jmobius.gameserver.model.itemcontainer.Inventory; import com.l2jmobius.gameserver.model.itemcontainer.Inventory;
import com.l2jmobius.gameserver.network.Disconnection;
import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.L2GameClient;
import com.l2jmobius.gameserver.network.OutgoingPackets; import com.l2jmobius.gameserver.network.OutgoingPackets;
@@ -240,6 +244,13 @@ public class CharSelectionInfo implements IClientOutgoingPacket
if (charInfopackage != null) if (charInfopackage != null)
{ {
characterList.add(charInfopackage); characterList.add(charInfopackage);
final L2PcInstance player = L2World.getInstance().getPlayer(charInfopackage.getObjectId());
if (player != null)
{
IdFactory.getInstance().releaseId(player.getObjectId());
Disconnection.of(player).storeMe().deleteMe();
}
} }
} }
} }
@@ -25,7 +25,6 @@ import com.l2jmobius.gameserver.model.actor.L2Summon;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.olympiad.OlympiadManager; import com.l2jmobius.gameserver.model.olympiad.OlympiadManager;
import com.l2jmobius.gameserver.model.zone.ZoneId; import com.l2jmobius.gameserver.model.zone.ZoneId;
import com.l2jmobius.gameserver.network.Disconnection;
import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.L2GameClient;
/** /**
@@ -104,6 +103,7 @@ public final class OfflineTradeUtil
PlayerCountManager.getInstance().incOfflineTradeCount(); PlayerCountManager.getInstance().incOfflineTradeCount();
final L2GameClient client = player.getClient(); final L2GameClient client = player.getClient();
client.close(true);
client.setDetached(true); client.setDetached(true);
player.leaveParty(); player.leaveParty();
@@ -147,7 +147,7 @@ public final class OfflineTradeUtil
OfflineTradersTable.onTransaction(player, false, true); OfflineTradersTable.onTransaction(player, false, true);
} }
Disconnection.of(player).storeMe().close(false); player.storeMe();
LOGGER_ACCOUNTING.info("Entering offline mode, " + client); LOGGER_ACCOUNTING.info("Entering offline mode, " + client);
return true; return true;
} }