/* * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later * version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ package com.l2jserver.gameserver.network.clientpackets; import java.util.logging.Level; import java.util.logging.LogRecord; import java.util.logging.Logger; import com.l2jserver.Config; import com.l2jserver.gameserver.datatables.CharNameTable; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.network.L2GameClient.GameClientState; import com.l2jserver.gameserver.network.serverpackets.ActionFailed; import com.l2jserver.gameserver.network.serverpackets.CharSelected; import com.l2jserver.gameserver.network.serverpackets.SSQInfo; /** * This class ... * * @version $Revision: 1.5.2.1.2.5 $ $Date: 2005/03/27 15:29:30 $ */ public class CharacterSelect extends L2GameClientPacket { private static final String _C__0D_CHARACTERSELECT = "[C] 0D CharacterSelect"; private static final Logger _log = Logger.getLogger(CharacterSelect.class.getName()); protected static final Logger _logAccounting = Logger.getLogger("accounting"); // cd private int _charSlot; @SuppressWarnings("unused") private int _unk1; // new in C4 @SuppressWarnings("unused") private int _unk2; // new in C4 @SuppressWarnings("unused") private int _unk3; // new in C4 @SuppressWarnings("unused") private int _unk4; // new in C4 @Override protected void readImpl() { _charSlot = readD(); _unk1 = readH(); _unk2 = readD(); _unk3 = readD(); _unk4 = readD(); } @Override protected void runImpl() { if (!getClient().getFloodProtectors().getCharacterSelect().tryPerformAction("CharacterSelect")) return; // we should always be abble to acquire the lock // but if we cant lock then nothing should be done (ie repeated packet) if (this.getClient().getActiveCharLock().tryLock()) { try { // should always be null // but if not then this is repeated packet and nothing should be done here if (this.getClient().getActiveChar() == null) { // The L2PcInstance must be created here, so that it can be attached to the L2GameClient if (Config.DEBUG) { _log.fine("selected slot:" + _charSlot); } //load up character from disk L2PcInstance cha = getClient().loadCharFromDisk(_charSlot); if (cha == null) { _log.severe("Character could not be loaded (slot:"+_charSlot+")"); sendPacket(ActionFailed.STATIC_PACKET); return; } if (cha.getAccessLevel().getLevel() < 0) { cha.logout(); return; } CharNameTable.getInstance().addName(cha); cha.setClient(this.getClient()); getClient().setActiveChar(cha); sendPacket(new SSQInfo()); this.getClient().setState(GameClientState.IN_GAME); CharSelected cs = new CharSelected(cha, getClient().getSessionId().playOkID1); sendPacket(cs); } } finally { this.getClient().getActiveCharLock().unlock(); } LogRecord record = new LogRecord(Level.INFO, "Logged in"); record.setParameters(new Object[]{this.getClient()}); _logAccounting.log(record); } } /* (non-Javadoc) * @see com.l2jserver.gameserver.clientpackets.ClientBasePacket#getType() */ @Override public String getType() { return _C__0D_CHARACTERSELECT; } }