Re: Multi skills bug
Posted: Sat Sep 11, 2010 9:32 am
Works fine (tested).
You forgot to import Thread....
...so here corrected code:
....but problem is not resolved.
These codes prevent you from restarting only so you can still exit without delay.
As topic owner wrote: this bug exists during exit, not relogging.
You forgot to import Thread....

...so here corrected code:
Code: Select all
Index: java/com/l2jserver/gameserver/network/clientpackets/RequestRestart.java===================================================================--- java/com/l2jserver/gameserver/network/clientpackets/RequestRestart.java (revision 4411)+++ java/com/l2jserver/gameserver/network/clientpackets/RequestRestart.java (working copy)@@ -20,6 +20,7 @@ import com.l2jserver.Config; import com.l2jserver.gameserver.SevenSignsFestival;+import com.l2jserver.gameserver.ThreadPoolManager; import com.l2jserver.gameserver.model.L2Party; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.network.L2GameClient;@@ -30,7 +31,6 @@ import com.l2jserver.gameserver.network.serverpackets.SystemMessage; import com.l2jserver.gameserver.taskmanager.AttackStanceTaskManager; - /** * This class ... *@@ -41,57 +41,57 @@ private static final String _C__46_REQUESTRESTART = "[C] 46 RequestRestart"; private static final Logger _log = Logger.getLogger(RequestRestart.class.getName()); protected static final Logger _logAccounting = Logger.getLogger("accounting");-+ @Override protected void readImpl() { // trigger }-+ @Override protected void runImpl() { final L2PcInstance player = getClient().getActiveChar();-+ if (player == null) return;-- if(player.getActiveEnchantItem() != null || player.getActiveEnchantAttrItem() != null)+ + if (player.getActiveEnchantItem() != null || player.getActiveEnchantAttrItem() != null) { sendPacket(RestartResponse.valueOf(false)); return; }-+ if (player.isLocked()) { _log.warning("Player " + player.getName() + " tried to restart during class change."); sendPacket(RestartResponse.valueOf(false)); return; }-+ if (player.getPrivateStoreType() != 0) { player.sendMessage("Cannot restart while trading"); sendPacket(RestartResponse.valueOf(false)); return; }-+ if (player.getActiveRequester() != null) { player.getActiveRequester().onTradeCancel(player); player.onTradeCancel(player.getActiveRequester()); }-+ if (AttackStanceTaskManager.getInstance().getAttackStanceTask(player) && !(player.isGM() && Config.GM_RESTART_FIGHTING)) { if (Config.DEBUG) _log.fine("Player " + player.getName() + " tried to logout while fighting.");-+ player.sendPacket(new SystemMessage(SystemMessageId.CANT_RESTART_WHILE_FIGHTING)); sendPacket(RestartResponse.valueOf(false)); return; }-+ // Prevent player from restarting if they are a festival participant // and it is in progress, otherwise notify party members that the player // is not longer a participant.@@ -103,9 +103,9 @@ sendPacket(RestartResponse.valueOf(false)); return; }-+ final L2Party playerParty = player.getParty();-+ if (playerParty != null) player.getParty().broadcastToPartyMembers(SystemMessage.sendString(player.getName() + " has been removed from the upcoming festival.")); }@@ -113,29 +113,37 @@ player.removeFromBossZone(); final L2GameClient client = getClient();-+ LogRecord record = new LogRecord(Level.INFO, "Logged out");- record.setParameters(new Object[]{client});+ record.setParameters(new Object[] { client }); _logAccounting.log(record);-- // detach the client from the char so that the connection isnt closed in the deleteMe- player.setClient(null);-- player.logout(); - getClient().setActiveChar(null);-- // return the client to the authed status- client.setState(GameClientState.AUTHED);-- sendPacket(RestartResponse.valueOf(true));-- // send char list- final CharSelectionInfo cl = new CharSelectionInfo(client.getAccountName(), client.getSessionId().playOkID1);- sendPacket(cl);- client.setCharSelection(cl.getCharInfo());+ ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()+ {+ + @Override+ public void run()+ {+ // detach the client from the char so that the connection isnt closed in the deleteMe+ player.setClient(null);+ + player.logout();+ + getClient().setActiveChar(null);+ + // return the client to the authed status+ client.setState(GameClientState.AUTHED);+ + sendPacket(RestartResponse.valueOf(true));+ + // send char list+ final CharSelectionInfo cl = new CharSelectionInfo(client.getAccountName(), client.getSessionId().playOkID1);+ sendPacket(cl);+ client.setCharSelection(cl.getCharInfo());+ }+ }, 5000); }-+ /* (non-Javadoc) * @see com.l2jserver.gameserver.clientpackets.ClientBasePacket#getType() */@@ -144,4 +152,4 @@ { return _C__46_REQUESTRESTART; }-}\ No newline at end of file+}
These codes prevent you from restarting only so you can still exit without delay.
As topic owner wrote: this bug exists during exit, not relogging.