|  |  | @ -23,7 +23,10 @@ import org.pmw.tinylog.Logger; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | import java.util.ArrayList; |  |  |  | import java.util.ArrayList; | 
			
		
	
		
		
			
				
					
					|  |  |  | import java.util.HashMap; |  |  |  | import java.util.HashMap; | 
			
		
	
		
		
			
				
					
					|  |  |  | import java.util.concurrent.*; |  |  |  | import java.util.concurrent.BlockingQueue; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | import java.util.concurrent.ConcurrentHashMap; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | import java.util.concurrent.DelayQueue; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | import java.util.concurrent.ThreadLocalRandom; | 
			
		
	
		
		
			
				
					
					|  |  |  | import java.util.concurrent.atomic.AtomicInteger; |  |  |  | import java.util.concurrent.atomic.AtomicInteger; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | public enum ForgeManager implements Runnable { |  |  |  | public enum ForgeManager implements Runnable { | 
			
		
	
	
		
		
			
				
					|  |  | @ -146,7 +149,7 @@ public enum ForgeManager implements Runnable { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         try { |  |  |  |         try { | 
			
		
	
		
		
			
				
					
					|  |  |  |             workOrder.workOrderID = workOrderCounter.incrementAndGet(); |  |  |  |             workOrder.workOrderID = workOrderCounter.incrementAndGet(); | 
			
		
	
		
		
			
				
					
					|  |  |  |             workOrder.rollingDuration = ForgeManager.calcRollingDuration(workOrder); |  |  |  |             workOrder.rollingDuration = NPCManager.calcRollingDuration(workOrder.vendor, workOrder.templateID); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |             workOrder.completionTime = System.currentTimeMillis() + workOrder.rollingDuration; |  |  |  |             workOrder.completionTime = System.currentTimeMillis() + workOrder.rollingDuration; | 
			
		
	
		
		
			
				
					
					|  |  |  |             workOrder.slots_used.set(calcAvailableSlots(workOrder)); |  |  |  |             workOrder.slots_used.set(calcAvailableSlots(workOrder)); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -197,24 +200,6 @@ public enum ForgeManager implements Runnable { | 
			
		
	
		
		
			
				
					
					|  |  |  |         return validation_result; |  |  |  |         return validation_result; | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     public static long calcRollingDuration(WorkOrder workOrder) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         float rollingDuration; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         rollingDuration = workOrder.vendor.getBuilding().getRank() * -5L + 40; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         rollingDuration = TimeUnit.MINUTES.toMillis((long) rollingDuration); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         rollingDuration *= Float.parseFloat(ConfigManager.MB_PRODUCTION_RATE.getValue()); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         ItemTemplate template = ItemTemplate.templates.get(workOrder.templateID); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         // Bane circle special case
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (template.item_bane_rank > 0) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             rollingDuration = (long) template.item_bane_rank * 60 * 60 * 3 * 1000 * Float.parseFloat(ConfigManager.MB_PRODUCTION_RATE.getValue()); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         return (long) rollingDuration; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     public static int calcAvailableSlots(WorkOrder workOrder) { |  |  |  |     public static int calcAvailableSlots(WorkOrder workOrder) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         // Slots available in a forge are based on the npc rank
 |  |  |  |         // Slots available in a forge are based on the npc rank
 | 
			
		
	
	
		
		
			
				
					|  |  | 
 |