/*
* Copyright (C) 2004-2015 L2J Server
*
* This file is part of L2J Server.
*
* L2J Server 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.
*
* L2J Server 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 <http://www.gnu.org/licenses/>.
*/
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.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.entity.L2Event;
import com.l2jserver.gameserver.model.zone.ZoneId;
import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
import com.l2jserver.gameserver.taskmanager.AttackStanceTaskManager;
/**
* This class ...
* @version $Revision: 1.9.4.3 $ $Date: 2005/03/27 15:29:30 $
*/
public final class Logout extends L2GameClientPacket
{
private static final String _C__00_LOGOUT = "[C] 00 Logout";
protected static final Logger _logAccounting = Logger.getLogger("accounting");
@Override
protected void readImpl()
{
}
@Override
protected void runImpl()
{
final L2PcInstance player = getClient().getActiveChar();
if (player == null)
{
return;
}
if ((player.getActiveEnchantItemId() != L2PcInstance.ID_NONE) || (player.getActiveEnchantAttrItemId() != L2PcInstance.ID_NONE))
{
player.sendPacket(ActionFailed.STATIC_PACKET);
return;
}
if (player.isLocked())
{
_log.warning("Player " + player.getName() + " tried to logout during class change.");
player.sendPacket(ActionFailed.STATIC_PACKET);
return;
}
if (player.isInsideZone(ZoneId.BATTALION) && !Config.BTZ_LOGOUT_ZONE)
{
player.sendMessage("You cannot logout while inside a Battalion zone.");
player.sendPacket(ActionFailed.STATIC_PACKET);
return;
}
// Don't allow leaving if player is fighting
if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player))
{
if (player.isGM() && Config.GM_RESTART_FIGHTING)
{
return;
}
player.sendPacket(SystemMessageId.YOU_CANNOT_EXIT_THE_GAME_WHILE_IN_COMBAT);
player.sendPacket(ActionFailed.STATIC_PACKET);
return;
}
if (L2Event.isParticipant(player))
{
player.sendMessage("A superior power doesn't allow you to leave the event.");
player.sendPacket(ActionFailed.STATIC_PACKET);
return;
}
// Remove player from Boss Zone
player.removeFromBossZone();
LogRecord record = new LogRecord(Level.INFO, "Disconnected");
record.setParameters(new Object[]
{
getClient()
});
_logAccounting.log(record);
player.logout();
}
@Override
public String getType()
{
return _C__00_LOGOUT;
}
}