Index: C:/Server/source/L2_GameServer_It/java/net/sf/l2j/gameserver/model/L2Clan.java =================================================================== --- C:/Server/source/L2_GameServer_It/java/net/sf/l2j/gameserver/model/L2Clan.java (revision 1272) +++ C:/Server/source/L2_GameServer_It/java/net/sf/l2j/gameserver/model/L2Clan.java (working copy) @@ -32,6 +32,7 @@ import net.sf.l2j.gameserver.communitybbs.Manager.ForumsBBSManager; import net.sf.l2j.gameserver.datatables.ClanTable; import net.sf.l2j.gameserver.datatables.SkillTable; +import net.sf.l2j.gameserver.instancemanager.CastleManager; import net.sf.l2j.gameserver.instancemanager.SiegeManager; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.network.SystemMessageId; @@ -368,6 +369,7 @@ } exMember.saveApprenticeAndSponsor(0, 0); + CastleManager.getInstance().removeCirclet(exMember, getHasCastle()); if (exMember.isOnline()) { L2PcInstance player = exMember.getPlayerInstance(); Index: C:/Server/source/L2_GameServer_It/java/net/sf/l2j/gameserver/model/entity/Castle.java =================================================================== --- C:/Server/source/L2_GameServer_It/java/net/sf/l2j/gameserver/model/entity/Castle.java (revision 1272) +++ C:/Server/source/L2_GameServer_It/java/net/sf/l2j/gameserver/model/entity/Castle.java (working copy) @@ -257,6 +257,7 @@ { _formerOwner = clan; clan.setHasCastle(0); + CastleManager.getInstance().removeCirclet(clan, getCastleId()); new Announcements().announceToAll(clan.getName() + " has lost " +getName() + " castle"); clan.broadcastToOnlineMembers(new PledgeShowInfoUpdate(clan)); } @@ -264,7 +265,6 @@ updateOwnerInDB(null); if (getSiege().getIsInProgress()) getSiege().midVictory(); - updateClansReputation(); } Index: C:/Server/source/L2_GameServer_It/java/net/sf/l2j/gameserver/instancemanager/CastleManager.java =================================================================== --- C:/Server/source/L2_GameServer_It/java/net/sf/l2j/gameserver/instancemanager/CastleManager.java (revision 1272) +++ C:/Server/source/L2_GameServer_It/java/net/sf/l2j/gameserver/instancemanager/CastleManager.java (working copy) @@ -24,7 +24,10 @@ import javolution.util.FastList; import net.sf.l2j.L2DatabaseFactory; import net.sf.l2j.gameserver.model.L2Clan; +import net.sf.l2j.gameserver.model.L2ClanMember; +import net.sf.l2j.gameserver.model.L2ItemInstance; import net.sf.l2j.gameserver.model.L2Object; +import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.model.entity.Castle; import net.sf.l2j.gameserver.SevenSigns; @@ -225,4 +228,54 @@ return 0; } + + // remove this castle's circlets from the clan + public void removeCirclet(L2Clan clan, int castleId) + { + for (L2ClanMember member : clan.getMembers()) + removeCirclet(member, castleId); + } + public void removeCirclet(L2ClanMember member, int castleId) + { + if (member == null) return; + L2PcInstance player = member.getPlayerInstance(); + int circletId = getCircletByCastleId(castleId); + + if (circletId != 0) + { + // online-player circlet removal + if (player != null) + { + L2ItemInstance circlet = player.getInventory().getItemByItemId(circletId); + if (circlet != null) + { + if (circlet.isEquipped()) + player.getInventory().unEquipItemInSlotAndRecord(circlet.getEquipSlot()); + player.destroyItemByItemId("CastleCircletRemoval", circletId, 1, player, true); + } + } + else // offline-player circlet removal + { + java.sql.Connection con = null; + try + { + con = L2DatabaseFactory.getInstance().getConnection(); + PreparedStatement statement = con.prepareStatement("DELETE FROM items WHERE owner_id = ? and item_id = ?"); + statement.setInt(1, member.getObjectId()); + statement.setInt(2, circletId); + statement.execute(); + statement.close(); + } + catch (Exception e) + { + System.out.println("Failed to remove castle circlets offline for player "+member.getName()); + e.printStackTrace(); + } + finally + { + try { con.close(); } catch (Exception e) {} + } + } + } + } }