|  |  | @ -307,6 +307,7 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler { | 
			
		
	
		
		
			
				
					
					|  |  |  | 		Building siegeBuilding; |  |  |  | 		Building siegeBuilding; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		PlacementInfo buildingList; |  |  |  | 		PlacementInfo buildingList; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		City serverCity; |  |  |  | 		City serverCity; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		Bane bane; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		// Retrieve the building details we're placing
 |  |  |  | 		// Retrieve the building details we're placing
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -324,44 +325,56 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler { | 
			
		
	
		
		
			
				
					
					|  |  |  | 			return false; |  |  |  | 			return false; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		// Checks validation conditions arising when placing
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		// generic structures.
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if (validateBuildingPlacement(serverZone, msg, origin, player, buildingList) == false) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 			return false; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		// If there is a bane placed, only the attackers and defenders can
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		// place siege assets
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		serverCity = ZoneManager.getCityAtLocation(buildingList.getLoc()); |  |  |  | 		serverCity = ZoneManager.getCityAtLocation(buildingList.getLoc()); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		//no city found
 |  |  |  | 		// No valid player city found
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if (serverCity == null) { |  |  |  | 		if (serverCity == null || serverZone.isPlayerCity() == false) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 			PlaceAssetMsg.sendPlaceAssetError(origin, 52, ""); // Cannot place outisde a guild zone
 |  |  |  | 			PlaceAssetMsg.sendPlaceAssetError(origin, 52, ""); // Cannot place outisde a guild zone
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			return false; |  |  |  | 			return false; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		// No bane no bow
 |  |  |  | 		// No bane no bow
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if (serverCity.getBane() == null) { |  |  |  | 		bane = serverCity.getBane(); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		if (bane == null) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 			PlaceAssetMsg.sendPlaceAssetError(origin, 66, ""); // There is no bane circle to support this building of war
 |  |  |  | 			PlaceAssetMsg.sendPlaceAssetError(origin, 66, ""); // There is no bane circle to support this building of war
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			return false; |  |  |  | 			return false; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		// Set the server zone to the city zone in order to account for being inside
 |  |  |  | 		// Set the server zone to the city zone in order to account for being inside
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		// the siege bounds buffer area
 |  |  |  | 		// the siege bounds buffer area
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		serverZone = serverCity.getParent(); |  |  |  | 		serverZone = serverCity.getParent(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		// Must belong to either attacker or defenders.
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if ((player.getGuild().equals(serverCity.getBane().getOwner().getGuild()) == false) |  |  |  | 		if ((player.getGuild().equals(serverCity.getBane().getOwner().getGuild()) == false) | 
			
		
	
		
		
			
				
					
					|  |  |  | 					&& (player.getGuild().equals(serverCity.getGuild()) == false)) { |  |  |  | 					&& (player.getGuild().equals(serverCity.getGuild()) == false)) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 			PlaceAssetMsg.sendPlaceAssetError(origin, 54, ""); // Must belong to attacker or defender
 |  |  |  | 			PlaceAssetMsg.sendPlaceAssetError(origin, 54, ""); // Must belong to attacker or defender
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			return false; |  |  |  | 			return false; | 
			
		
	
		
		
			
				
					
					|  |  |  | 			} |  |  |  | 			} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		// If there is a bane placed, we limit placement to  2x the stone rank's worth of attacker assets
 |  |  |  | 		// Player must be  GL or IC of the bane guild to place bow.
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		if(GuildStatusController.isGuildLeader(player.getGuildStatus()) == false | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				&& GuildStatusController.isInnerCouncil(player.getGuildStatus()) == false) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			PlaceAssetMsg.sendPlaceAssetError(origin, 10, player.getName());  // You must be a guild leader to place this asset
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			return false; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		//cannot place on grid until bane is live
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		if(bane.getSiegePhase() != SiegePhase.WAR && | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				serverCity.isLocationOnCityGrid(buildingList.getLoc()) == true) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			PlaceAssetMsg.sendPlaceAssetError(origin, 53, player.getName()); // Buildings of war cannot be placed around a city grid unless there is an active bane
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			return false; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		// If there is a bane placed, we limit bow placement to 2x the stone rank's worth of attacker assets
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		// and 1x the tree rank for defenders
 |  |  |  | 		// and 1x the tree rank for defenders
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if (validateSiegeLimits(player, origin, serverCity.getBane()) == false) |  |  |  | 		if (validateSiegeLimits(player, origin, serverCity.getBane()) == false) | 
			
		
	
	
		
		
			
				
					|  |  | @ -380,8 +393,6 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		siegeBuilding.setProtectionState(ProtectionState.PROTECTED); |  |  |  | 		siegeBuilding.setProtectionState(ProtectionState.PROTECTED); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		 |  |  |  | 		 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		// No bane placed.  We're done!
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		return true; |  |  |  | 		return true; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -1230,85 +1241,23 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		RealmType currentRealm; |  |  |  | 		RealmType currentRealm; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if(Blueprint.getBlueprint(placementInfo.getBlueprintUUID()).isSiegeEquip() == false) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		{ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 			if (serverZone.isPlayerCity() == false) { |  |  |  | 			if (serverZone.isPlayerCity() == false) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 				PlaceAssetMsg.sendPlaceAssetError(origin, 52, player.getName()); |  |  |  | 				PlaceAssetMsg.sendPlaceAssetError(origin, 52, player.getName()); | 
			
		
	
		
		
			
				
					
					|  |  |  | 				return false; |  |  |  | 				return false; | 
			
		
	
		
		
			
				
					
					|  |  |  | 			} |  |  |  | 			} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			City city = ZoneManager.getCityAtLocation(placementInfo.getLoc()); |  |  |  | 			City city = ZoneManager.getCityAtLocation(placementInfo.getLoc()); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			if (player.getGuild().equals(city.getGuild()) == false) { |  |  |  | 			if (player.getGuild().equals(city.getGuild()) == false) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 				PlaceAssetMsg.sendPlaceAssetError(origin, 40, player.getName()); |  |  |  | 				PlaceAssetMsg.sendPlaceAssetError(origin, 40, player.getName()); | 
			
		
	
		
		
			
				
					
					|  |  |  | 				return false; |  |  |  | 				return false; | 
			
		
	
		
		
			
				
					
					|  |  |  | 			} |  |  |  | 			} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			if (city.isLocationOnCityGrid(placementInfo.getLoc()) == false) { |  |  |  | 			if (city.isLocationOnCityGrid(placementInfo.getLoc()) == false) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 				PlaceAssetMsg.sendPlaceAssetError(origin, 41, player.getName()); |  |  |  | 				PlaceAssetMsg.sendPlaceAssetError(origin, 41, player.getName()); | 
			
		
	
		
		
			
				
					
					|  |  |  | 				return false; |  |  |  | 				return false; | 
			
		
	
		
		
			
				
					
					|  |  |  | 			} |  |  |  | 			} | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		else |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		{ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 			City city = ZoneManager.getCityAtLocation(placementInfo.getLoc()); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 			if(city == null) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 			{ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				PlaceAssetMsg.sendPlaceAssetError(origin, 52, player.getName()); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				return false; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 			} |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 			Bane bane = city.getBane(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 			//check if player is owner/IC of tree or bane
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 			if (player.getGuild().equals(city.getGuild()) == true) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 			{ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				//is from owners guild
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				if(GuildStatusController.isGuildLeader(player.getGuildStatus()) == false && GuildStatusController.isInnerCouncil(player.getGuildStatus()) == false) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				{ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 					PlaceAssetMsg.sendPlaceAssetError(origin, 57, player.getName()); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 					return false; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				} |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 			} |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 			else |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 			{ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				//is not from owners guild
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				if(bane == null) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				{ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 					//bane was null
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 					PlaceAssetMsg.sendPlaceAssetError(origin, 66, player.getName()); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 					return false; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				} |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				if(city == null) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				{ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 					//city was null
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 					PlaceAssetMsg.sendPlaceAssetError(origin, 67, player.getName()); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 					return false; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				} |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				//check if player is from siege guild
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				if(player.getGuild().equals(bane.getOwner().getGuild()) == false) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				{ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 					PlaceAssetMsg.sendPlaceAssetError(origin, 54, player.getName()); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 					return false; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				} |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				//check if player is GL or IC of the bane guild
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				if(GuildStatusController.isGuildLeader(player.getGuildStatus()) == false && GuildStatusController.isInnerCouncil(player.getGuildStatus()) == false) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				{ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 					PlaceAssetMsg.sendPlaceAssetError(origin, 71, player.getName()); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 					return false; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				} |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 				//cannot place on grid until bane is live
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				if(bane.getSiegePhase() != SiegePhase.WAR && city.isLocationOnCityGrid(placementInfo.getLoc()) == true) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				{ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 					PlaceAssetMsg.sendPlaceAssetError(origin, 71, player.getName()); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 					return false; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				} |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				if(city.isLocationWithinSiegeBounds(placementInfo.getLoc()) == false && city.isLocationOnCityZone(placementInfo.getLoc()) == false) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				{ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 					PlaceAssetMsg.sendPlaceAssetError(origin, 66, player.getName()); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 					return false; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 				} |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 			} |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		// Retrieve the building details we're placing
 |  |  |  | 		// Retrieve the building details we're placing
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if (serverZone.isNPCCity() == true) { |  |  |  | 		if (serverZone.isNPCCity() == true) { | 
			
		
	
	
		
		
			
				
					|  |  | 
 |