All pastes #750918 Raw Edit

Untitled

public text v1 · immutable
#750918 ·published 2007-10-26 21:55 UTC
rendered paste body
Index: 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;
+        			if (Config.REMOVE_CASTLE_CIRCLETS)
+        			{
+        				CastleManager.getInstance().removeCirclet(clan,clan.getHasCastle());
+        			}
+				}
 				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(clan,clan.getHasCastle());
+			}
 			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) {}
+				}
+			}
+		}
+	}
 }