Index: C:/eclipse-31m7/workspace/c4/L2_GameServer/java/net/sf/l2j/gameserver/ClientThread.java =================================================================== --- C:/eclipse-31m7/workspace/c4/L2_GameServer/java/net/sf/l2j/gameserver/ClientThread.java (revision 1250) +++ C:/eclipse-31m7/workspace/c4/L2_GameServer/java/net/sf/l2j/gameserver/ClientThread.java (working copy) @@ -146,7 +146,41 @@ clan.removeClanMember(cha.getName()); } - public void deleteChar(int charslot) throws Exception + /** + * Marks char as deleted, sets deletettime field + * @param charslot + */ + public void markDeleted(int charslot) + { + int objid = getObjectIdForSlot(charslot); + if (objid < 0) + return; + + java.sql.Connection con = null; + try + { + con = L2DatabaseFactory.getInstance().getConnection(); + PreparedStatement statement = con.prepareStatement("UPDATE characters SET deletetime = ? WHERE obj_Id=?"); + statement.setLong(1, System.currentTimeMillis()+(60000*60*24*Config.CHAR_DELETE_TIME)); + statement.setInt(2, objid); + statement.execute(); + statement.close(); + } + catch (Exception e) + { + _log.warning("Error while marking char as deleted: " + e); + } + finally + { + try { con.close(); } catch (Exception e) {} + } + } + + /** + * Delete char + * @param objid + */ + public void deleteChar(int objid) { //have to make sure active character must be nulled if (getActiveChar() != null) @@ -156,7 +190,6 @@ _activeChar = null; } - int objid = getObjectIdForSlot(charslot); if (objid < 0) return; Index: C:/eclipse-31m7/workspace/c4/L2_GameServer/java/net/sf/l2j/gameserver/clientpackets/CharacterDelete.java =================================================================== --- C:/eclipse-31m7/workspace/c4/L2_GameServer/java/net/sf/l2j/gameserver/clientpackets/CharacterDelete.java (revision 1250) +++ C:/eclipse-31m7/workspace/c4/L2_GameServer/java/net/sf/l2j/gameserver/clientpackets/CharacterDelete.java (working copy) @@ -55,7 +55,7 @@ try { - getClient().deleteChar(_charSlot); + getClient().markDeleted(_charSlot); } catch (Exception e) { Index: C:/eclipse-31m7/workspace/c4/L2_GameServer/java/net/sf/l2j/gameserver/model/CharSelectInfoPackage.java =================================================================== --- C:/eclipse-31m7/workspace/c4/L2_GameServer/java/net/sf/l2j/gameserver/model/CharSelectInfoPackage.java (revision 1250) +++ C:/eclipse-31m7/workspace/c4/L2_GameServer/java/net/sf/l2j/gameserver/model/CharSelectInfoPackage.java (working copy) @@ -113,10 +113,26 @@ { return _deleteTimer; } - public void setDeleteTimer(int deleteTimer) + + public void setDeleteTimer(long deleteTimer) { - _deleteTimer = deleteTimer; + long currentTimestamp = System.currentTimeMillis(); + int estimated = 0; + + if(currentTimestamp < deleteTimer && deleteTimer > 0) // still alive :P + { + estimated = Math.abs((int)(deleteTimer - currentTimestamp)/1000); + } + else if(currentTimestamp > deleteTimer && deleteTimer > 0) // w00t, time to kill tat fuggin char + { + _deleteTimer = -1; + //System.out.println("Char deletion time arrived, bye bye!"); + } + + //System.out.println("Char deletion infoz, estimated: "+ estimated +" delete timer: "+deleteTimer+" current timestamp: "+currentTimestamp); + _deleteTimer = (estimated); } + public long getLastAccess() { return _lastAccess; Index: C:/eclipse-31m7/workspace/c4/L2_GameServer/java/net/sf/l2j/gameserver/serverpackets/MultiSellList.java =================================================================== --- C:/eclipse-31m7/workspace/c4/L2_GameServer/java/net/sf/l2j/gameserver/serverpackets/MultiSellList.java (revision 1250) +++ C:/eclipse-31m7/workspace/c4/L2_GameServer/java/net/sf/l2j/gameserver/serverpackets/MultiSellList.java (working copy) @@ -28,7 +28,11 @@ */ package net.sf.l2j.gameserver.serverpackets; +import java.util.ArrayList; + +import net.sf.l2j.gameserver.model.L2MultiSell; import net.sf.l2j.gameserver.model.L2PcInstance; +import net.sf.l2j.gameserver.model.L2MultiSell.MultisellEntry; /** * This class ... @@ -40,10 +44,14 @@ private static final String _S__D0_MULTISELLLIST = "[S] D0 MultiSellList"; protected L2PcInstance _player; + protected int _listId; + protected ArrayList list; - public MultiSellList( L2PcInstance p ) + public MultiSellList( L2PcInstance p, int listId ) { _player = p; + _listId = listId; + list = L2MultiSell.getInstance().getList(_listId); } void runImpl() @@ -51,43 +59,31 @@ } void writeImpl() - { + { + //ddddd [dchh] [hdhdh] [hhdh] writeC(0xd0); writeD(1); //?? list id writeD(1); //list lenght - for(int i = 0; i < 1; i++) - {//dhdhdhh - writeD(1); // makeID - writeH(10); - writeD(71); //itemID - writeH(20); - //writeD(512); //itemType - //writeD(1); //itemAmount - writeD(512); - writeH(3); //Ingredient Count - writeH(3); - //supposed to be "dhdhdhh" - - //Item 1 supposed to be hhdh - writeH(1458); //ID - writeH(1459); //?? - writeD(573); //Count - writeH(0x7fff); //Enchant Level - //Item 2 - writeH(1458); //ID - writeH(10); //?? - writeD(555); //Count - writeH(0x7fff); //Enchant Level - //Item 2 - writeH(1459); //ID - writeH(1459); //?? - writeD(555); //Count - writeH(0x7fff); //Enchant Level - - } - - writeD(12); //?? - + writeD(1); + writeD(1); + writeD(1); + + writeD(1); + writeC(1); + writeH(1); + writeH(1); + + writeH(1); + writeD(1); + writeH(1); + writeD(1); + writeH(1); + + writeH(1); + writeH(1); + writeD(1); + writeH(1); + } @Override Index: C:/eclipse-31m7/workspace/c4/L2_GameServer/java/net/sf/l2j/gameserver/serverpackets/CharSelectInfo.java =================================================================== --- C:/eclipse-31m7/workspace/c4/L2_GameServer/java/net/sf/l2j/gameserver/serverpackets/CharSelectInfo.java (revision 1250) +++ C:/eclipse-31m7/workspace/c4/L2_GameServer/java/net/sf/l2j/gameserver/serverpackets/CharSelectInfo.java (working copy) @@ -188,7 +188,9 @@ while (charList.next())// fills the package { charInfopackage = restoreChar(charList); - characterList.add(charInfopackage); + + if(charInfopackage != null) + characterList.add(charInfopackage); } charList.close(); @@ -233,7 +235,7 @@ charInfopackage.setRace(chardata.getInt("race")); charInfopackage.setClassId(chardata.getInt("classid")); - charInfopackage.setDeleteTimer(chardata.getInt("deletetime")); + charInfopackage.setDeleteTimer(chardata.getLong("deletetime")); charInfopackage.setLastAccess(chardata.getLong("lastAccess")); } catch (Exception e) @@ -241,6 +243,12 @@ _log.log(Level.INFO, "", e); } + if(charInfopackage.getDeleteTimer() == -1) + { + getClient().deleteChar(charInfopackage.getObjectId()); + return null; + } + return charInfopackage; }