|  |  | @ -96,26 +96,28 @@ public enum ForgeManager implements Runnable { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     public static int submit(WorkOrder workOrder) { |  |  |  |     public static int submit(WorkOrder workOrder) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         // Must have a city to roll anything
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         City city = workOrder.vendor.building.getCity(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (city == null) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             return 58; //58: The formula is beyond the means of this facility
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         // Concurrency is rightly managed by same lock as warehouse
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         city.transactionLock.writeLock().lock(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         // Make sure vendor can roll the formulae, warehouse can
 |  |  |  |         // Make sure vendor can roll the formulae, warehouse can
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         // afford this wordOrder and other related checks.
 |  |  |  |         // afford this wordOrder and other related checks.
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         int validation_result = WorkOrder.validate(workOrder); |  |  |  |         int validation_result = WorkOrder.validate(workOrder); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         // The return code is used by the submitter as a
 |  |  |  |         // The return code is used by the ItemProductionMsgHandler as a
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         // popup error message for the player.
 |  |  |  |         // popup error message for the player.
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (validation_result != 0) |  |  |  |         if (validation_result != 0) | 
			
		
	
		
		
			
				
					
					|  |  |  |             return validation_result; |  |  |  |             return validation_result; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         // Concurrency is managed by same lock as warehouse
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         City city = workOrder.vendor.building.getCity(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (city == null) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             return 58; //58: The formula is beyond the means of this facility
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         city.transactionLock.writeLock().lock(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         try { |  |  |  |         try { | 
			
		
	
		
		
			
				
					
					|  |  |  |             // Configure this production run.
 |  |  |  |             // Configure this production run.
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | 
 |