rendered paste bodyIndex: 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) {}
+ }
+ }
+ }
+ }
}