@ -22,127 +22,147 @@ import java.time.LocalDateTime;
				@@ -22,127 +22,147 @@ import java.time.LocalDateTime;
					 
			
		
	
		
			
				
					import  java.util.ArrayList ;  
			
		
	
		
			
				
					import  java.util.concurrent.ConcurrentHashMap ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					import static  engine.server.MBServerStatics.MINE_LATE_WINDOW ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					public  class  HourlyJobThread  implements  Runnable  {  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						private  static  int  hotzoneCount  =  0 ;   
			
		
	
		
			
				
					    private  static  final  int  hotzoneCount  =  0 ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    public  HourlyJobThread ( )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    public  void  run ( )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // *** REFACTOR: TRY TRY TRY TRY {{{{{{{{{{{ OMG
   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        Logger . info ( "Hourly job is now running." ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        try  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						public  HourlyJobThread ( )  {   
			
		
	
		
			
				
					            ZoneManager . generateAndSetRandomHotzone ( ) ;   
			
		
	
		
			
				
					            Zone  hotzone  =  ZoneManager . getHotZone ( ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						}   
			
		
	
		
			
				
					            if  ( hotzone  = =  null )  {   
			
		
	
		
			
				
					                Logger . error ( "Null hotzone returned from mapmanager" ) ;   
			
		
	
		
			
				
					            }  else  {   
			
		
	
		
			
				
					                Logger . info ( "new hotzone: "  +  hotzone . getName ( ) ) ;   
			
		
	
		
			
				
					                WorldServer . setLastHZChange ( System . currentTimeMillis ( ) ) ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						public  void  run ( )  {   
			
		
	
		
			
				
					        }  catch  ( Exception  e )  {   
			
		
	
		
			
				
					            Logger . error ( e . toString ( ) ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							// *** REFACTOR: TRY TRY TRY TRY {{{{{{{{{{{ OMG
   
			
		
	
		
			
				
					        // Open or Close mines for the current mine window. 
  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							Logger . info ( "Hourly job is now running." ) ;   
			
		
	
		
			
				
					        processMineWindow (  ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								try  {   
			
		
	
		
			
				
					        // Deposit mine resources to Guilds
   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
										ZoneManager . generateAndSetRandomHotzone ( ) ;   
			
		
	
		
			
				
										Zone  hotzone  =  ZoneManager . getHotZone ( ) ;   
			
		
	
		
			
				
					        for  ( Mine  mine  :  Mine . getMines ( ) )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
										if  ( hotzone  = =  null )   {  
			
		
	
		
			
				
											Logger . error (  "Null hotzone returned from mapmanager"  ) ;  
			
		
	
		
			
				
										}  else   {  
			
		
	
		
			
				
											 Logger . info (  "new hotzone: "  +  hotzone . getName  ( ) ) ;  
			
		
	
		
			
				
											WorldServer . setLastHZChange ( System . currentTimeMillis ( ) ) ;   
			
		
	
		
			
				
										 }  
			
		
	
		
			
				
					            try   {  
			
		
	
		
			
				
					                mine . depositMineResources (  ) ;  
			
		
	
		
			
				
					            }  catch  ( Exception  e )   {  
			
		
	
		
			
				
					                 Logger . info ( e . getMessage ( )  +  " for Mine "  +  mine . getObjectUUID ( ) ) ;  
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					         }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								}  catch  ( Exception  e )  {   
			
		
	
		
			
				
									Logger . error (  e . toString ( ) ) ;   
			
		
	
		
			
				
								}   
			
		
	
		
			
				
					        // Reset time-gated access to WOO slider.
   
			
		
	
		
			
				
					        // *** Do this after the mines open/close!
   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							// Open or Close mines for the current mine window.
   
			
		
	
		
			
				
					        if  ( LocalDateTime . now ( ) . getHour ( )  = =  MINE_LATE_WINDOW )  {   
			
		
	
		
			
				
					            Guild  guild ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							processMineWindow ( ) ;   
			
		
	
		
			
				
					            for  ( AbstractGameObject  dbObject  :  DbManager . getList ( Enum . GameObjectType . Guild ) )  {   
			
		
	
		
			
				
					                guild  =  ( Guild )  dbObject ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							for  ( Mine  mine  :  Mine . getMines ( ) )  {   
			
		
	
		
			
				
					                if  ( guild  ! =  null )   
			
		
	
		
			
				
					                    guild . wooWasModified  =  false ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
									try  {   
			
		
	
		
			
				
										mine . depositMineResources ( ) ;   
			
		
	
		
			
				
									}  catch  ( Exception  e )  {   
			
		
	
		
			
				
										Logger . info ( e . getMessage ( )  +  " for Mine "  +  mine . getObjectUUID ( ) ) ;   
			
		
	
		
			
				
									}   
			
		
	
		
			
				
								}   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Mines can only be claimed once per cycle.
   
			
		
	
		
			
				
					        // This will reset at 1am after the last mine
   
			
		
	
		
			
				
					        // window closes.
   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								// Update city population values
   
			
		
	
		
			
				
					        if  ( LocalDateTime . now ( ) . getHour ( )  = =  MINE_LATE_WINDOW  +  1 )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								ConcurrentHashMap < Integer ,  AbstractGameObject >  map  =  DbManager . getMap ( Enum . GameObjectType . City ) ;   
			
		
	
		
			
				
					            for  ( Mine  mine  :  Mine . getMines ( ) )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								if  ( map  ! =  null )  {   
			
		
	
		
			
				
					                if  ( mine . wasClaimed  = =  true )   
			
		
	
		
			
				
					                    mine . wasClaimed  =  false ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
									for  ( AbstractGameObject  ago  :  map . values ( ) ) {   
			
		
	
		
			
				
					        // Update city population values
   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
										City  city  =  ( City ) ago  ;  
			
		
	
		
			
				
					        ConcurrentHashMap < Integer ,  AbstractGameObject >  map  =  DbManager . getMap ( Enum . GameObjectType . City )  ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
										if  ( city  ! =  null )   
			
		
	
		
			
				
											if  ( city . getGuild ( )  ! =  null )  {   
			
		
	
		
			
				
												ArrayList < PlayerCharacter >  guildList  =  Guild . GuildRoster ( city . getGuild ( ) ) ;   
			
		
	
		
			
				
												city . setPopulation ( guildList . size ( ) ) ;   
			
		
	
		
			
				
											}   
			
		
	
		
			
				
									}   
			
		
	
		
			
				
									City . lastCityUpdate  =  System . currentTimeMillis ( ) ;   
			
		
	
		
			
				
								}  else  {   
			
		
	
		
			
				
									Logger . error ( "missing city map" ) ;   
			
		
	
		
			
				
								}   
			
		
	
		
			
				
					        if  ( map  ! =  null )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								// Log metrics to console
   
			
		
	
		
			
				
								Logger . info (  WorldServer . getUptimeString ( ) ) ;   
			
		
	
		
			
				
								Logger . info (  SimulationManager . getPopulationString ( ) ) ;   
			
		
	
		
			
				
								Logger . info (  MessageDispatcher . getNetstatString ( ) ) ;   
			
		
	
		
			
				
								Logger . info ( PurgeOprhans . recordsDeleted . toString ( )  +  "orphaned items deleted" ) ;   
			
		
	
		
			
				
						}   
			
		
	
		
			
				
					            for  ( AbstractGameObject  ago  :  map . values ( ) )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						public  static  void  processMineWindow ( )  {   
			
		
	
		
			
				
					                City  city  =  ( City )  ago ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							try  {   
			
		
	
		
			
				
					                if  ( city  ! =  null )   
			
		
	
		
			
				
					                    if  ( city . getGuild ( )  ! =  null )  {   
			
		
	
		
			
				
					                        ArrayList < PlayerCharacter >  guildList  =  Guild . GuildRoster ( city . getGuild ( ) ) ;   
			
		
	
		
			
				
					                        city . setPopulation ( guildList . size ( ) ) ;   
			
		
	
		
			
				
					                    }   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					            City . lastCityUpdate  =  System . currentTimeMillis ( ) ;   
			
		
	
		
			
				
					        }  else  {   
			
		
	
		
			
				
					            Logger . error ( "missing city map" ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								ArrayList < Mine >  mines  =  Mine . getMines ( ) ;   
			
		
	
		
			
				
					        // Log metrics to console
   
			
		
	
		
			
				
					        Logger . info ( WorldServer . getUptimeString ( ) ) ;   
			
		
	
		
			
				
					        Logger . info ( SimulationManager . getPopulationString ( ) ) ;   
			
		
	
		
			
				
					        Logger . info ( MessageDispatcher . getNetstatString ( ) ) ;   
			
		
	
		
			
				
					        Logger . info ( PurgeOprhans . recordsDeleted . toString ( )  +  "orphaned items deleted" ) ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								for  ( Mine  mine  :  mines )  {   
			
		
	
		
			
				
									try  {   
			
		
	
		
			
				
					    public  static  void  processMineWindow ( )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
										// Mines can only be claimed once a cycle.
   
			
		
	
		
			
				
										// The cycle resets at 01:00hrs after the
   
			
		
	
		
			
				
										// Last mine window closes.
   
			
		
	
		
			
				
					        try  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
										if  ( mine . wasClaimed  = =  true )  {   
			
		
	
		
			
				
					            ArrayList < Mine >  mines  =  Mine . getMines ( ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
											if  ( LocalDateTime . now ( ) . getHour ( )  = =  01 )   
			
		
	
		
			
				
												mine . wasClaimed  =  false ;   
			
		
	
		
			
				
					            for  ( Mine  mine  :  mines )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
											continue ;   
			
		
	
		
			
				
										}   
			
		
	
		
			
				
					                try  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
										 // Open Errant Mines
  
			
		
	
		
			
				
					                     // Open Errant Mines
  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
										 if  ( mine . getOwningGuild ( ) . isErrant ( ) )  {  
			
		
	
		
			
				
											 mine . handleStartMineWindow ( ) ;  
			
		
	
		
			
				
											 Mine . setLastChange ( System . currentTimeMillis ( ) ) ;  
			
		
	
		
			
				
											 continue ;  
			
		
	
		
			
				
										 }  
			
		
	
		
			
				
					                     if  ( mine . getOwningGuild ( ) . isErrant ( ) )  {  
			
		
	
		
			
				
					                         mine . handleStartMineWindow ( ) ;  
			
		
	
		
			
				
					                         Mine . setLastChange ( System . currentTimeMillis ( ) ) ;  
			
		
	
		
			
				
					                         continue ;  
			
		
	
		
			
				
					                     }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
										 // Open Mines with a current guild hour
  
			
		
	
		
			
				
					                     // Open Mines with a current guild hour
  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
										 if  ( mine . getOwningGuild ( ) . getNation ( ) . getMineTime ( )  = =  
			
		
	
		
			
				
											 LocalDateTime . now ( ) . getHour ( ) )  {  
			
		
	
		
			
				
											 mine . handleStartMineWindow ( ) ;  
			
		
	
		
			
				
											 Mine . setLastChange ( System . currentTimeMillis ( ) ) ;  
			
		
	
		
			
				
											 continue ;  
			
		
	
		
			
				
										 }  
			
		
	
		
			
				
					                     if  ( mine . getOwningGuild ( ) . getNation ( ) . getMineTime ( )  = =  
			
		
	
		
			
				
					                             LocalDateTime . now ( ) . getHour ( ) )  {  
			
		
	
		
			
				
					                         mine . handleStartMineWindow ( ) ;  
			
		
	
		
			
				
					                         Mine . setLastChange ( System . currentTimeMillis ( ) ) ;  
			
		
	
		
			
				
					                         continue ;  
			
		
	
		
			
				
					                     }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
										 // Close all remaining mines
  
			
		
	
		
			
				
					                     // Close all remaining mines
  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
										  if  ( mine . handleEndMineWindow ( ) )  
			
		
	
		
			
				
												 Mine . setLastChange ( System . currentTimeMillis ( ) ) ;  
			
		
	
		
			
				
					                     if  ( mine . handleEndMineWindow ( ) )  
			
		
	
		
			
				
					                         Mine . setLastChange ( System . currentTimeMillis ( ) ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
									 }  catch  ( Exception  e )  {  
			
		
	
		
			
				
										 Logger . error   ( "mineID: "  +  mine . getObjectUUID ( ) ,  e . toString ( ) ) ;  
			
		
	
		
			
				
									 }  
			
		
	
		
			
				
								 }  
			
		
	
		
			
				
							 }  catch  ( Exception  e )  {  
			
		
	
		
			
				
								 Logger . error (   e . toString ( ) ) ;  
			
		
	
		
			
				
							 }  
			
		
	
		
			
				
						 }  
			
		
	
		
			
				
					                 }  catch  ( Exception  e )  {  
			
		
	
		
			
				
					                     Logger . error ( "mineID: "  +  mine . getObjectUUID ( ) ,  e . toString ( ) ) ;  
			
		
	
		
			
				
					                 }  
			
		
	
		
			
				
					             }  
			
		
	
		
			
				
					         }  catch  ( Exception  e )  {  
			
		
	
		
			
				
					             Logger . error ( e . toString ( ) ) ;  
			
		
	
		
			
				
					         }  
			
		
	
		
			
				
					     }  
			
		
	
		
			
				
					}