Index: C:/Documents and Settings/Vivian/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/clientpackets/RequestRestart.java =================================================================== --- C:/Documents and Settings/Vivian/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/clientpackets/RequestRestart.java (revision 1718) +++ C:/Documents and Settings/Vivian/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/clientpackets/RequestRestart.java (working copy) @@ -24,7 +24,9 @@ import net.sf.l2j.gameserver.ClientThread; import net.sf.l2j.gameserver.SevenSignsFestival; import net.sf.l2j.gameserver.GameTimeController; +import net.sf.l2j.gameserver.model.L2ItemInstance; import net.sf.l2j.gameserver.model.L2Party; +import net.sf.l2j.gameserver.model.L2World; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.serverpackets.ActionFailed; import net.sf.l2j.gameserver.serverpackets.CharSelectInfo; @@ -40,7 +42,7 @@ { private static final String _C__46_REQUESTRESTART = "[C] 46 RequestRestart"; private static Logger _log = Logger.getLogger(RequestRestart.class.getName()); - + private L2ItemInstance[] _items; /** * packet type id 0x46 * format: c @@ -102,6 +104,21 @@ player.deleteMe(); ClientThread.saveCharToDisk(getClient().getActiveChar()); + _items = player.getInventory().getAvailableItems(true); + int count = _items.length; + for (int i = 0; i < count; i++) + { + player.getInventory().LogoffremoveItem(_items[i]); + L2World.getInstance().removeObject(_items[i]); + } + _items = player.getWarehouse().getItems(); + count = _items.length; + for (int i = 0; i < count; i++) + { + player.getInventory().LogoffremoveItem(_items[i]); + L2World.getInstance().removeObject(_items[i]); + } + RestartResponse response = new RestartResponse(); sendPacket(response); } Index: C:/Documents and Settings/Vivian/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/clientpackets/Logout.java =================================================================== --- C:/Documents and Settings/Vivian/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/clientpackets/Logout.java (revision 1718) +++ C:/Documents and Settings/Vivian/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/clientpackets/Logout.java (working copy) @@ -24,7 +24,9 @@ import net.sf.l2j.gameserver.ClientThread; import net.sf.l2j.gameserver.SevenSignsFestival; import net.sf.l2j.gameserver.GameTimeController; +import net.sf.l2j.gameserver.model.L2ItemInstance; import net.sf.l2j.gameserver.model.L2Party; +import net.sf.l2j.gameserver.model.L2World; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.serverpackets.ActionFailed; import net.sf.l2j.gameserver.serverpackets.LeaveWorld; @@ -39,7 +41,7 @@ { private static final String _C__09_LOGOUT = "[C] 09 Logout"; private static Logger _log = Logger.getLogger(Logout.class.getName()); - + private L2ItemInstance[] _items; // c /** @@ -95,6 +97,21 @@ //save character ClientThread.saveCharToDisk(player); + _items = player.getInventory().getAvailableItems(true); + int count = _items.length; + for (int i = 0; i < count; i++) + { + player.getInventory().LogoffremoveItem(_items[i]); + L2World.getInstance().removeObject(_items[i]); + } + _items = player.getWarehouse().getItems(); + count = _items.length; + for (int i = 0; i < count; i++) + { + player.getInventory().LogoffremoveItem(_items[i]); + L2World.getInstance().removeObject(_items[i]); + } + // normally the server would send serveral "delete object" before "leaveWorld" // we skip that for now