I made a simple method that I call while CL is changed.
java/org/l2jmobius/gameserver/model/clan/Clan.java (manual patch)
public void setNewLeader(ClanMember member, PlayerInstance player)
{
if (player.isRiding() || player.isFlying())
{
player.sendPacket(ActionFailed.STATIC_PACKET);
return;
}
if (!_leader.isOnline())
{
return;
}
if (member == null)
{
return;
}
if (!member.isOnline())
{
return;
}
if (setLeader(member))
{
+ transferCWHToNewLeader(member.getPlayerInstance().getObjectId(), player.getObjectId());
final SystemMessage sm = new SystemMessage(SystemMessageId.CLAN_LORD_PRIVILEGES_HAVE_BEEN_TRANSFERRED_TO_S1);
sm.addString(member.getName());
broadcastToOnlineMembers(sm);
}
}
+
+ public void transferCWHToNewLeader(int newLeaderId, int oldLeaderId)
+ {
+ // no need to update anything...
+ if (newLeaderId == oldLeaderId)
+ {
+ return;
+ }
+
+ // update cwh in DB
+ try (Connection con = DatabaseFactory.getConnection())
+ {
+ final PreparedStatement statement = con.prepareStatement("UPDATE items SET owner_id = ? WHERE loc = 'CLANWH' AND owner_id = ?");
+ statement.setInt(1, newLeaderId);
+ statement.setInt(2, oldLeaderId);
+ statement.execute();
+ statement.close();
+ }
+ catch (Exception e)
+ {
+ LOGGER.warning("error while transferring cwh " + e);
+ }
+ }
+
Maybe not so pretty, but at least works.