@ -308,8 +308,6 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler {
				@@ -308,8 +308,6 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler {
					 
			
		
	
		
			
				
							Building  siegeBuilding ;   
			
		
	
		
			
				
							PlacementInfo  buildingList ;   
			
		
	
		
			
				
							City  serverCity ;   
			
		
	
		
			
				
							int  numAttackerBuildings  =  0 ;   
			
		
	
		
			
				
							int  numDefenderBuildings  =  0 ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							// Retrieve the building details we're placing
   
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -359,8 +357,6 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler {
				@@ -359,8 +357,6 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler {
					 
			
		
	
		
			
				
										serverCity  =  player . getGuild ( ) . getOwnedCity ( ) ;   
			
		
	
		
			
				
							}   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							if  ( ( serverCity  ! =  null )  & &   
			
		
	
		
			
				
									( serverCity . getBane ( )  ! =  null ) )  {   
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -377,95 +373,104 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler {
				@@ -377,95 +373,104 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler {
					 
			
		
	
		
			
				
							}   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							// cant place siege equipment off city zone.
   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							  
			
		
	
		
			
				
							// Create the siege Building
   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							siegeBuilding  =  createStructure ( player ,  msg . getFirstPlacementInfo ( ) ,  serverZone ) ;   
			
		
	
		
			
				
							if  ( serverCity  = =  null )   
			
		
	
		
			
				
								return  true ;   
			
		
	
		
			
				
							  
			
		
	
		
			
				
							// Oops something went really wrong
   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							if  ( siegeBuilding  = =  null )   
			
		
	
		
			
				
								return  false ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							if  ( serverCity . getBane ( )  = =  null )   
			
		
	
		
			
				
							// If there is a bane placed, we limit placement to  2x the stone rank's worth of attacker assets
   
			
		
	
		
			
				
							// and 1x the tree rank for defenders
   
			
		
	
		
			
				
							  
			
		
	
		
			
				
							if  ( validateSiegeLimits ( player ,  origin ,  serverCity . getBane ( ) )  = =  false )   
			
		
	
		
			
				
								return  true ;   
			
		
	
		
			
				
							  
			
		
	
		
			
				
							// passes validation: can assign auto-protection to war asset
   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							// If there is an bane placed, we protect 2x the stone rank's worth of attacker assets
   
			
		
	
		
			
				
							if  ( serverCity . getBane ( )  ! =  null )   
			
		
	
		
			
				
								if  ( serverCity . isLocationOnCityGrid ( siegeBuilding . getBounds ( ) ) )   
			
		
	
		
			
				
									if  ( player . getGuild ( ) . equals ( serverCity . getBane ( ) . getOwner ( ) . getGuild ( ) ) )   
			
		
	
		
			
				
										return  true ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							// and 1x the tree rank's worth of assets automatically
   
			
		
	
		
			
				
							siegeBuilding . setProtectionState ( ProtectionState . PROTECTED ) ;   
			
		
	
		
			
				
							  
			
		
	
		
			
				
							// No bane placed.  We're done!
   
			
		
	
		
			
				
							  
			
		
	
		
			
				
							return  true ;   
			
		
	
		
			
				
						}   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							HashSet < AbstractWorldObject >  awoList  =  WorldGrid . getObjectsInRangePartial ( serverCity ,  1000 ,  MBServerStatics . MASK_BUILDING ) ;   
			
		
	
		
			
				
						private   boolean  validateSiegeLimits ( PlayerCharacter  playerCharacter ,  ClientConnection  origin ,  Bane  bane )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							for  ( AbstractWorldObject  awo  :  awoList )  {   
			
		
	
		
			
				
								Building  building  =  ( Building ) awo ;   
			
		
	
		
			
				
							City  serverCity  =  bane . getCity ( ) ;   
			
		
	
		
			
				
							HashSet < AbstractWorldObject >  awoList ;   
			
		
	
		
			
				
							  
			
		
	
		
			
				
							int  maxAttackerAssets  =  serverCity . getBane ( ) . getStone ( ) . getRank ( )  *  2 ;   
			
		
	
		
			
				
							int  maxDefenderAssets  =  serverCity . getRank ( ) ;   
			
		
	
		
			
				
							int  numDefenderBuildings  =  0 ;   
			
		
	
		
			
				
							int  numAttackerBuildings  =  0 ;   
			
		
	
		
			
				
							  
			
		
	
		
			
				
							// Count bow for attackers and defenders
   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								if  ( building . getBlueprint ( )  ! =  null )   
			
		
	
		
			
				
									if  ( ! building . getBlueprint ( ) . isSiegeEquip ( ) )   
			
		
	
		
			
				
										continue ;   
			
		
	
		
			
				
							awoList  =   WorldGrid . getObjectsInRangePartial ( serverCity ,  1000 ,  MBServerStatics . MASK_BUILDING ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								if  ( ! building . getLoc ( ) . isInsideCircle ( serverCity . getLoc ( ) ,  Enum . CityBoundsType . SIEGE . extents ) )   
			
		
	
		
			
				
									continue ;   
			
		
	
		
			
				
							for  ( AbstractWorldObject  awo  :  awoList )  {   
			
		
	
		
			
				
								Building  building  =  ( Building )  awo ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								if  ( building . getGuild ( )  = =  null )   
			
		
	
		
			
				
							if  ( building . getBlueprint ( )  ! =  null )   
			
		
	
		
			
				
								if  ( ! building . getBlueprint ( ) . isSiegeEquip ( ) )   
			
		
	
		
			
				
									continue ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								 if  ( building . getGuild ( ) . isErrant (  ) )   
			
		
	
		
			
				
									 continue ;   
			
		
	
		
			
				
							if  ( ! building . getLoc ( ) . isInsideCircle ( serverCity . getLoc ( ) ,  Enum . CityBoundsType . SIEGE . extents  ) )   
			
		
	
		
			
				
								continue ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								 if  ( ! building . getGuild ( ) . equals ( serverCity . getGuild ( ) )  & &  ! building . getGuild ( ) . equals ( serverCity . getBane ( ) . getOwner ( ) . getGuild ( ) ) )   
			
		
	
		
			
				
									 continue ;   
			
		
	
		
			
				
							if  ( building . getGuild ( )  = =  null  )   
			
		
	
		
			
				
								continue ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								// Only count auto protected buildings
   
			
		
	
		
			
				
								if  ( building . getProtectionState ( )  ! =  ProtectionState . PROTECTED )   
			
		
	
		
			
				
									continue ;   
			
		
	
		
			
				
							if  ( building . getGuild ( ) . isErrant ( ) )   
			
		
	
		
			
				
								continue ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								if  ( building . getGuild ( ) . equals ( serverCity . getGuild ( ) ) )   
			
		
	
		
			
				
									numDefenderBuildings + + ;   
			
		
	
		
			
				
								else  if  ( building . getGuild ( ) . equals ( serverCity . getBane ( ) . getOwner ( ) . getGuild ( ) ) )   
			
		
	
		
			
				
									numAttackerBuildings + + ;   
			
		
	
		
			
				
							if  ( ! building . getGuild ( ) . equals ( serverCity . getGuild ( ) )  & &  ! building . getGuild ( ) . equals ( serverCity . getBane ( ) . getOwner ( ) . getGuild ( ) ) )   
			
		
	
		
			
				
								continue ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								// Validate bane limits on siege assets
   
			
		
	
		
			
				
							// Only count auto protected buildings
   
			
		
	
		
			
				
							if  ( building . getProtectionState ( )  ! =  ProtectionState . PROTECTED )   
			
		
	
		
			
				
								continue ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								int  maxAttackerAssets  =  serverCity . getBane ( ) . getStone ( ) . getRank ( )  *  2 ;   
			
		
	
		
			
				
								int  maxDefenderAssets  =  serverCity . getRank ( ) ;   
			
		
	
		
			
				
							if  ( building . getGuild ( ) . equals ( serverCity . getGuild ( ) ) )   
			
		
	
		
			
				
								numDefenderBuildings + + ;   
			
		
	
		
			
				
							  
			
		
	
		
			
				
							if  ( building . getGuild ( ) . equals ( serverCity . getBane ( ) . getOwner ( ) . getGuild ( ) ) )   
			
		
	
		
			
				
								numAttackerBuildings + + ;   
			
		
	
		
			
				
						  
			
		
	
		
			
				
								// Validate bane limits on siege assets
   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								if ( player . getGuild ( ) . equals ( serverCity . getGuild ( ) ) ) {   
			
		
	
		
			
				
								if   ( playerCharact er . getGuild ( ) . equals ( serverCity . getGuild ( ) ) )   {   
			
		
	
		
			
				
									//defender attempting to place asset
   
			
		
	
		
			
				
									if ( numDefenderBuildings  > =  maxDefenderAssets ) {   
			
		
	
		
			
				
										PlaceAssetMsg . sendPlaceAssetError ( origin , 62 ,  "" ) ;   
			
		
	
		
			
				
										return  tru e;   
			
		
	
		
			
				
									if   ( numDefenderBuildings  > =  maxDefenderAssets )   {   
			
		
	
		
			
				
										PlaceAssetMsg . sendPlaceAssetError ( origin ,   62 ,  "" ) ;   
			
		
	
		
			
				
										return  fals e;   
			
		
	
		
			
				
									}   
			
		
	
		
			
				
								}   
			
		
	
		
			
				
								else  if ( player . getGuild ( ) . equals ( serverCity . getBane ( ) . getStone ( ) . getGuild ( ) ) ) {   
			
		
	
		
			
				
								  
			
		
	
		
			
				
								if  ( playerCharacter . getGuild ( ) . equals ( serverCity . getBane ( ) . getStone ( ) . getGuild ( ) ) )  {   
			
		
	
		
			
				
									//attacker attempting to place asset
   
			
		
	
		
			
				
									if ( numAttackerBuildings  > =  maxAttackerAssets ) {   
			
		
	
		
			
				
										PlaceAssetMsg . sendPlaceAssetError ( origin , 61 ,  "" ) ;   
			
		
	
		
			
				
										return  tru e;   
			
		
	
		
			
				
									if   ( numAttackerBuildings  > =  maxAttackerAssets )   {   
			
		
	
		
			
				
										PlaceAssetMsg . sendPlaceAssetError ( origin ,   61 ,  "" ) ;   
			
		
	
		
			
				
										return  fals e;   
			
		
	
		
			
				
									}   
			
		
	
		
			
				
								}   
			
		
	
		
			
				
								else {   
			
		
	
		
			
				
									//third party attempting to place asset, early exit
   
			
		
	
		
			
				
									return  true ;   
			
		
	
		
			
				
								}   
			
		
	
		
			
				
								  
			
		
	
		
			
				
							}   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							// passes validation: can assign auto-protection to war asset
   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							if  ( serverCity . getBane ( )  ! =  null )   
			
		
	
		
			
				
								if  ( serverCity . isLocationOnCityGrid ( siegeBuilding . getBounds ( ) ) )   
			
		
	
		
			
				
									if  ( player . getGuild ( ) . equals ( serverCity . getBane ( ) . getOwner ( ) . getGuild ( ) ) )   
			
		
	
		
			
				
										return  true ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							siegeBuilding . setProtectionState ( ProtectionState . PROTECTED ) ;   
			
		
	
		
			
				
							// No bane placed.  We're done!
   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							return  true ;   
			
		
	
		
			
				
							// Passed validation
   
			
		
	
		
			
				
							  
			
		
	
		
			
				
							return   true ;   
			
		
	
		
			
				
						}   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						  
			
		
	
		
			
				
								  
			
		
	
		
			
				
						private  boolean  placeTreeOfLife ( PlayerCharacter  playerCharacter ,  ClientConnection  origin ,  PlaceAssetMsg  msg )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							Realm  serverRealm ;