@ -105,6 +105,11 @@ public class MobileFSM {
				@@ -105,6 +105,11 @@ public class MobileFSM {
					 
			
		
	
		
			
				
					                mob . setLastAttackTime ( System . currentTimeMillis ( )  +  attackDelay ) ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        if ( target . getPet ( )  ! =  null ) {   
			
		
	
		
			
				
					            if ( target . getPet ( ) . getCombatTarget ( )  = =  null  & &  target . getPet ( ) . assist ( )  = =  true ) {   
			
		
	
		
			
				
					                target . getPet ( ) . setCombatTarget ( mob ) ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    public  static  void  AttackBuilding ( Mob  mob ,  Building  target )  {   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -172,6 +177,9 @@ public class MobileFSM {
				@@ -172,6 +177,9 @@ public class MobileFSM {
					 
			
		
	
		
			
				
					                attackDelay  =  11000 ;   
			
		
	
		
			
				
					            CombatUtilities . combatCycle ( mob ,  target ,  false ,  mob . getWeaponItemBase ( false ) ) ;   
			
		
	
		
			
				
					            mob . setLastAttackTime ( System . currentTimeMillis ( )  +  attackDelay ) ;   
			
		
	
		
			
				
					            if ( target . combatTarget  = =  null ) {   
			
		
	
		
			
				
					                target . combatTarget  =  mob ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -432,6 +440,18 @@ public class MobileFSM {
				@@ -432,6 +440,18 @@ public class MobileFSM {
					 
			
		
	
		
			
				
					                return ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        if ( aiAgent . combatTarget  = =  null )  {   
			
		
	
		
			
				
					            //look for pets to aggro if no players found to aggro
   
			
		
	
		
			
				
					            HashSet < AbstractWorldObject >  awoList  =  WorldGrid . getObjectsInRangePartial ( aiAgent ,  MobileFSMManager . AI_BASE_AGGRO_RANGE ,  MBServerStatics . MASK_PET ) ;   
			
		
	
		
			
				
					            for  ( AbstractWorldObject  awoMob  :  awoList )  {   
			
		
	
		
			
				
					                //dont scan self.
   
			
		
	
		
			
				
					                if  ( aiAgent . equals ( awoMob ) )   
			
		
	
		
			
				
					                    continue ;   
			
		
	
		
			
				
					                Mob  aggroMob  =  ( Mob )  awoMob ;   
			
		
	
		
			
				
					                aiAgent . setCombatTarget ( aggroMob ) ;   
			
		
	
		
			
				
					                return ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    private  static  void  CheckMobMovement ( Mob  mob )  {   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -658,11 +678,26 @@ public class MobileFSM {
				@@ -658,11 +678,26 @@ public class MobileFSM {
					 
			
		
	
		
			
				
					                mob . killCharacter ( "no owner" ) ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        if  ( mob . getCombatTarget ( )  ! =  null  & &  ! mob . getCombatTarget ( ) . isAlive ( ) )   
			
		
	
		
			
				
					            mob . setCombatTarget ( null ) ;   
			
		
	
		
			
				
					        if  ( mob . getCombatTarget ( )  ! =  null )   
			
		
	
		
			
				
					            if ( ! mob . getCombatTarget ( ) . isAlive ( )  | |  mob . getCombatTarget ( ) . getLoc ( ) . distanceSquared ( mob . getOwner ( ) . getLoc ( ) )  >  75 )   
			
		
	
		
			
				
					                mob . setCombatTarget ( null ) ;   
			
		
	
		
			
				
					        if  ( MovementUtilities . canMove ( mob )  & &  mob . BehaviourType . canRoam )   
			
		
	
		
			
				
					            CheckMobMovement ( mob ) ;   
			
		
	
		
			
				
					        CheckForAttack ( mob ) ;   
			
		
	
		
			
				
					        //recover health
   
			
		
	
		
			
				
					        if ( mob . getTimestamps ( ) . containsKey ( "HEALTHRECOVERED" )  = =  false ) {   
			
		
	
		
			
				
					            mob . getTimestamps ( ) . put ( "HEALTHRECOVERED" ,  System . currentTimeMillis ( ) ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        if ( mob . isSit ( )  & &  mob . getTimeStamp ( "HEALTHRECOVERED" )  <  System . currentTimeMillis ( )  +  3000 ) {   
			
		
	
		
			
				
					            if ( mob . getHealth ( )  <  mob . getHealthMax ( ) )  {   
			
		
	
		
			
				
					                float  recoveredHealth  =  mob . getHealthMax ( )  *  ( ( 1  +  mob . getBonuses ( ) . getFloatPercentAll ( Enum . ModType . HealthRecoverRate ,  Enum . SourceType . None ) ) *  0 . 01f ) ;   
			
		
	
		
			
				
					                mob . setHealth ( mob . getHealth ( )  +  recoveredHealth ) ;   
			
		
	
		
			
				
					                mob . getTimestamps ( ) . put ( "HEALTHRECOVERED" , System . currentTimeMillis ( ) ) ;   
			
		
	
		
			
				
					                if ( mob . getHealth ( )  >  mob . getHealthMax ( ) ) {   
			
		
	
		
			
				
					                    mob . setHealth ( mob . getHealthMax ( ) ) ;   
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    private  static  void  HamletGuardLogic ( Mob  mob )  {