@ -56,7 +56,7 @@ public class MobileFSM {
				@@ -56,7 +56,7 @@ public class MobileFSM {
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        SpellAggroGrouperWimpy ( Spell ,  true ,  false ,  true ,  false ,  false ) ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        //Independent Types
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        SimpleStandingGuard ( null ,  false ,  false ,  false ,  false ,  false ) ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        Pet1 ( null ,  false ,  false ,  fals e,  false ,  false ) ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        Pet1 ( null ,  false ,  false ,  tru e,  false ,  false ) ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        Simple ( null ,  false ,  false ,  true ,  false ,  false ) ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        Helpee ( null ,  false ,  true ,  true ,  false ,  true ) ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        HelpeeWimpy ( null ,  true ,  false ,  true ,  false ,  false ) ,   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -566,7 +566,11 @@ public class MobileFSM {
				@@ -566,7 +566,11 @@ public class MobileFSM {
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  static  void  run ( Mob  mob )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( mob  = =  null  | |  mob . BehaviourType  = =  MobBehaviourType . None )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( mob  = =  null )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( mob . isPet ( )  = =  false  & &  mob . isSummonedPet ( )  = =  false  & &  mob . isNecroPet ( )  = =  false )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            if  ( mob . BehaviourType  ! =  null  & &  mob . BehaviourType  = =  MobBehaviourType . None )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                return ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            if  ( mob . isAlive ( )  = =  false )  {   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -593,7 +597,12 @@ public class MobileFSM {
				@@ -593,7 +597,12 @@ public class MobileFSM {
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            if  ( ! mob . BehaviourType . isWimpy  & &  ! mob . isMoving ( )  & &  mob . combatTarget  ! =  null )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                CheckForAttack ( mob ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        }  else  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            CheckMobMovement ( mob ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            CheckForAttack ( mob ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    private  static  void  CheckForAggro ( Mob  aiAgent )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        //looks for and sets mobs combatTarget
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( ! aiAgent . isAlive ( ) )  {   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -629,6 +638,7 @@ public class MobileFSM {
				@@ -629,6 +638,7 @@ public class MobileFSM {
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    private  static  void  CheckMobMovement ( Mob  mob )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        mob . updateLocation ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( mob . isPet ( )  = =  false  & &  mob . isSummonedPet ( )  = =  false  & &  mob . isNecroPet ( )  = =  false )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            if  ( mob . getCombatTarget ( )  = =  null )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                //patrol
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                int  patrolRandom  =  ThreadLocalRandom . current ( ) . nextInt ( 1000 ) ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -649,7 +659,7 @@ public class MobileFSM {
				@@ -649,7 +659,7 @@ public class MobileFSM {
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        MovementUtilities . aiMove ( mob ,  Vector3fImmutable . getRandomPointInCircle ( mob . getBindLoc ( ) ,  patrolRadius ) ,  true ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        } else  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					             }   else  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                //chase target
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                mob . updateMovementState ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                if  ( CombatUtilities . inRange2D ( mob ,  mob . getCombatTarget ( ) ,  mob . getRange ( ) )  = =  false )  {   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -662,6 +672,28 @@ public class MobileFSM {
				@@ -662,6 +672,28 @@ public class MobileFSM {
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        }  else {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            //pet logic
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            if  ( mob . getCombatTarget ( )  = =  null  | |  mob . combatTarget . isAlive ( )  = =  false )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                //move back to owner
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                if  ( CombatUtilities . inRange2D ( mob ,  mob . getOwner ( ) ,  5 )  = =  false )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    mob . destination  =  mob . getOwner ( ) . getLoc ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    MovementUtilities . moveToLocation ( mob ,  mob . destination ,  5 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            }  else  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                //chase target
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                mob . updateMovementState ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                if  ( CombatUtilities . inRange2D ( mob ,  mob . getCombatTarget ( ) ,  mob . getRange ( ) )  = =  false )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    if  ( mob . getRange ( )  >  15 )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        mob . destination  =  mob . getCombatTarget ( ) . getLoc ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        MovementUtilities . moveToLocation ( mob ,  mob . destination ,  0 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    }  else  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        mob . destination  =  MovementUtilities . GetDestinationToCharacter ( mob ,  ( AbstractCharacter )  mob . getCombatTarget ( ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        MovementUtilities . moveToLocation ( mob ,  mob . destination ,  mob . getRange ( ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    private  static  void  CheckForRespawn ( Mob  aiAgent )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        //handles checking for respawn of dead mobs even when no players have mob loaded