/* * 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 <http://www.gnu.org/licenses/>. */ package silentium.gameserver.network.clientpackets; import java.sql.Connection; import java.sql.PreparedStatement; import silentium.commons.database.DatabaseFactory; import silentium.gameserver.model.L2World; import silentium.gameserver.model.actor.instance.L2PcInstance; import silentium.gameserver.network.SystemMessageId; import silentium.gameserver.network.serverpackets.FriendList; import silentium.gameserver.network.serverpackets.SystemMessage; import silentium.gameserver.tables.CharNameTable; public final class RequestFriendDel extends L2GameClientPacket { private String _name; @Override protected void readImpl() { _name = readS(); } @Override protected void runImpl() { final L2PcInstance activeChar = getClient().getActiveChar(); if (activeChar == null) return; int id = CharNameTable.getInstance().getIdByName(_name); if (id == -1 || !activeChar.getFriendList().contains(id)) { activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.S1_NOT_ON_YOUR_FRIENDS_LIST).addString(_name)); return; } try (Connection con = DatabaseFactory.getConnection()) { PreparedStatement statement = con.prepareStatement("DELETE FROM character_friends WHERE (char_id = ? AND friend_id = ?) OR (char_id = ? AND friend_id = ?)"); statement.setInt(1, activeChar.getObjectId()); statement.setInt(2, id); statement.setInt(3, id); statement.setInt(4, activeChar.getObjectId()); statement.execute(); statement.close(); // Player deleted from your friendlist activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.S1_HAS_BEEN_DELETED_FROM_YOUR_FRIENDS_LIST).addString(_name)); activeChar.getFriendList().remove(new Integer(id)); activeChar.sendPacket(new FriendList(activeChar)); // update friendList *heavy method* L2PcInstance player = L2World.getInstance().getPlayer(_name); if (player != null) { player.getFriendList().remove(Integer.valueOf(activeChar.getObjectId())); player.sendPacket(new FriendList(player)); // update friendList *heavy method* } } catch (Exception e) { log.warn("could not delete friend objectid: ", e); } } }