rendered paste bodyIndex: C:/Server/source/L2_GameServer_It/java/config/altsettings.properties
===================================================================
--- C:/Server/source/L2_GameServer_It/java/config/altsettings.properties (revision 1265)
+++ C:/Server/source/L2_GameServer_It/java/config/altsettings.properties (working copy)
@@ -177,6 +177,9 @@
# Privilege browse warehouse enables at the same time also withdraw from warehouse!
AltMembersCanWithdrawFromClanWH = False
+#Remove Castle circlets after a clan lose its castle or a player leaves a clan? - default true
+RemoveCastleCirclets = True
+
#-------------------------------------------------------------
# Olympiad config
#-------------------------------------------------------------
Index: C:/Server/source/L2_GameServer_It/java/net/sf/l2j/Config.java
===================================================================
--- C:/Server/source/L2_GameServer_It/java/net/sf/l2j/Config.java (revision 1272)
+++ C:/Server/source/L2_GameServer_It/java/net/sf/l2j/Config.java (working copy)
@@ -130,6 +130,8 @@
public static double ALT_GAME_CREATION_SP_RATE;
/** Alternative setting to blacksmith use of recipes to craft - default true*/
public static boolean ALT_BLACKSMITH_USE_RECIPES;
+ /** Remove Castle circlets after clan lose his castle? - default true*/
+ public static boolean REMOVE_CASTLE_CIRCLETS;
/** Alternative game weight limit multiplier - default 1*/
public static double ALT_WEIGHT_LIMIT;
@@ -1640,6 +1642,7 @@
ALT_PARTY_RANGE = Integer.parseInt(altSettings.getProperty("AltPartyRange", "1600"));
ALT_PARTY_RANGE2 = Integer.parseInt(altSettings.getProperty("AltPartyRange2", "1400"));
ALT_GAME_SKILL_HIT_RATE = Float.parseFloat(altSettings.getProperty("AltGameSkillHitRate", "1."));
+ REMOVE_CASTLE_CIRCLETS = Boolean.parseBoolean(altSettings.getProperty("RemoveCastleCirclets", "true"));
IS_CRAFTING_ENABLED = Boolean.parseBoolean(altSettings.getProperty("CraftingEnabled", "true"));
LIFE_CRYSTAL_NEEDED = Boolean.parseBoolean(altSettings.getProperty("LifeCrystalNeeded", "true"));
SP_BOOK_NEEDED = Boolean.parseBoolean(altSettings.getProperty("SpBookNeeded", "true"));
@@ -2299,7 +2302,7 @@
else if (pName.equalsIgnoreCase("AltWeightLimit")) ALT_WEIGHT_LIMIT = Double.parseDouble(pValue);
else if (pName.equalsIgnoreCase("AltBlacksmithUseRecipes")) ALT_BLACKSMITH_USE_RECIPES = Boolean.valueOf(pValue);
else if (pName.equalsIgnoreCase("AltGameSkillLearn")) ALT_GAME_SKILL_LEARN = Boolean.valueOf(pValue);
-
+ else if (pName.equalsIgnoreCase("RemoveCastleCirclets")) REMOVE_CASTLE_CIRCLETS = Boolean.valueOf(pValue);
else if (pName.equalsIgnoreCase("AltGameCancelByHit"))
{
ALT_GAME_CANCEL_BOW = pValue.equalsIgnoreCase("bow") || pValue.equalsIgnoreCase("all");
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;
@@ -367,7 +368,10 @@
}
}
exMember.saveApprenticeAndSponsor(0, 0);
-
+ if (Config.REMOVE_CASTLE_CIRCLETS)
+ {
+ 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)
@@ -25,6 +25,7 @@
import java.util.logging.Logger;
import javolution.util.FastList;
+import net.sf.l2j.Config;
import net.sf.l2j.L2DatabaseFactory;
import net.sf.l2j.gameserver.Announcements;
import net.sf.l2j.gameserver.CastleUpdater;
@@ -237,7 +238,13 @@
if (oldOwner != null)
{
if (_formerOwner == null)
- _formerOwner = oldOwner;
+ {
+ _formerOwner = oldOwner;
+ if (Config.REMOVE_CASTLE_CIRCLETS)
+ {
+ CastleManager.getInstance().removeCirclet(_formerOwner,getCastleId());
+ }
+ }
oldOwner.setHasCastle(0); // Unset has castle flag for old owner
new Announcements().announceToAll(oldOwner.getName() + " has lost " + getName() + " castle!");
}
@@ -256,6 +263,10 @@
if (clan != null)
{
_formerOwner = clan;
+ if (Config.REMOVE_CASTLE_CIRCLETS)
+ {
+ CastleManager.getInstance().removeCirclet(_formerOwner,getCastleId());
+ }
clan.setHasCastle(0);
new Announcements().announceToAll(clan.getName() + " has lost " +getName() + " castle");
clan.broadcastToOnlineMembers(new PledgeShowInfoUpdate(clan));
@@ -264,7 +275,6 @@
updateOwnerInDB(null);
if (getSiege().getIsInProgress())
getSiege().midVictory();
-
updateClansReputation();
}
@@ -569,7 +579,7 @@
statement.close();
// ============================================================================
- // Announce to clan memebers
+ // Announce to clan members
if (clan != null)
{
clan.setHasCastle(getCastleId()); // Set has castle flag for new owner
@@ -591,7 +601,7 @@
}
// =========================================================
- // Proeprty
+ // Property
public final int getCastleId()
{
return _castleId;
@@ -1055,4 +1065,9 @@
}
}
}
+
+ public L2Clan getFormerOwner()
+ {
+ return _formerOwner;
+ }
}
\ No newline at end of file
Index: C:/Server/source/L2_GameServer_It/java/net/sf/l2j/gameserver/model/entity/Siege.java
===================================================================
--- C:/Server/source/L2_GameServer_It/java/net/sf/l2j/gameserver/model/entity/Siege.java (revision 1272)
+++ C:/Server/source/L2_GameServer_It/java/net/sf/l2j/gameserver/model/entity/Siege.java (working copy)
@@ -24,6 +24,7 @@
import java.util.List;
import javolution.util.FastList;
+import net.sf.l2j.Config;
import net.sf.l2j.L2DatabaseFactory;
import net.sf.l2j.gameserver.Announcements;
import net.sf.l2j.gameserver.ThreadPoolManager;
@@ -31,6 +32,7 @@
import net.sf.l2j.gameserver.datatables.MapRegionTable;
import net.sf.l2j.gameserver.datatables.NpcTable;
import net.sf.l2j.gameserver.idfactory.IdFactory;
+import net.sf.l2j.gameserver.instancemanager.CastleManager;
import net.sf.l2j.gameserver.instancemanager.MercTicketManager;
import net.sf.l2j.gameserver.instancemanager.SiegeGuardManager;
import net.sf.l2j.gameserver.instancemanager.SiegeManager;
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) {}
+ }
+ }
+ }
+ }
}