rendered paste bodyIndex: C:/eclipse-31m7/workspace/c4/L2_GameServer/java/net/sf/l2j/Config.java===================================================================--- C:/eclipse-31m7/workspace/c4/L2_GameServer/java/net/sf/l2j/Config.java (revision 1184)+++ C:/eclipse-31m7/workspace/c4/L2_GameServer/java/net/sf/l2j/Config.java (working copy)@@ -328,6 +328,7 @@ /** Deep Blue Mobs' Drop Rules Enabled */ public static final boolean DEEPBLUE_DROP_RULES; public static final int UNSTUCK_INTERVAL;+ public static final int CHAR_DELETE_TIME; // telnet enabled public static final boolean IS_TELNET_ENABLED;@@ -523,6 +524,7 @@ STARTING_ADENA = Integer.parseInt(otherSettings.getProperty("StartingAdena", "100")); UNSTUCK_INTERVAL = Integer.parseInt(otherSettings.getProperty("UnstuckInterval", "300"));+ CHAR_DELETE_TIME = Integer.parseInt(otherSettings.getProperty("CharDeleteTime", "5")); } catch (NullPointerException e) { e.printStackTrace();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 1184)+++ 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 1184)+++ 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/L2PcInstance.java===================================================================--- C:/eclipse-31m7/workspace/c4/L2_GameServer/java/net/sf/l2j/gameserver/model/L2PcInstance.java (revision 1184)+++ C:/eclipse-31m7/workspace/c4/L2_GameServer/java/net/sf/l2j/gameserver/model/L2PcInstance.java (working copy)@@ -296,7 +296,7 @@ private int _accessLevel; private boolean _messageRefusal = false; // message refusal mode- private boolean _isInGmlist = false; // show gm gm-li+ private boolean _isInGmlist = false; // show in gm list public boolean _exploring = false; @@ -4358,6 +4358,13 @@ // Calculate Henna modifiers of this L2PcInstance recalcHennaStats(); + /*+ HennaInfo hi = new HennaInfo(this);+ sendPacket(hi);+ + UserInfo ui = new UserInfo(this);+ sendPacket(ui);+ */ } /**@@ -5434,7 +5441,7 @@ out.writeObject(getSaveList()); // Write the entire pathNodeMap of Positions out.flush(); // Always flush the output. out.close(); // And close the stream.- sendPacket(SystemMessage.sendString("Path Node table saved to: L2J/pathnode/"+fileName+".bin"));+ sendPacket(SystemMessage.sendString("Path Node table saved to: pathnode/"+fileName+".bin")); } 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 1184)+++ 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/GameServer.java===================================================================--- C:/eclipse-31m7/workspace/c4/L2_GameServer/java/net/sf/l2j/gameserver/GameServer.java (revision 1184)+++ C:/eclipse-31m7/workspace/c4/L2_GameServer/java/net/sf/l2j/gameserver/GameServer.java (working copy)@@ -112,6 +112,9 @@ import net.sf.l2j.gameserver.handler.usercommandhandlers.Loc; import net.sf.l2j.gameserver.handler.usercommandhandlers.Time; import net.sf.l2j.gameserver.handler.voicedcommandhandlers.kill;+import net.sf.l2j.gameserver.handler.voicedcommandhandlers.movement;+import net.sf.l2j.gameserver.handler.voicedcommandhandlers.set;+import net.sf.l2j.gameserver.handler.voicedcommandhandlers.castle; import net.sf.l2j.gameserver.idfactory.IdFactory; import net.sf.l2j.gameserver.lib.JBForth; import net.sf.l2j.gameserver.model.AutoChatHandler;@@ -418,6 +421,9 @@ _voicedCommandHandler = VoicedCommandHandler.getInstance(); _voicedCommandHandler.registerVoicedCommandHandler(new kill());+ _voicedCommandHandler.registerVoicedCommandHandler(new set());+ _voicedCommandHandler.registerVoicedCommandHandler(new castle());+ _voicedCommandHandler.registerVoicedCommandHandler(new movement()); _log.config("VoicedCommandHandler: Loaded " + _voicedCommandHandler.size() + " handlers."); _gmList = GmListTable.getInstance();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 1184)+++ 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; }