@ -60,8 +60,6 @@ public class Mob extends AbstractIntelligenceAgent {
				@@ -60,8 +60,6 @@ public class Mob extends AbstractIntelligenceAgent {
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  int  spawnTime ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  Zone  parentZone ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  boolean  hasLoot  =  false ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  boolean  isPlayerGuard  =  false ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  AbstractCharacter  guardCaptain ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  long  deathTime  =  0 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  int  equipmentSetID  =  0 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  int  runeSet  =  0 ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -81,7 +79,7 @@ public class Mob extends AbstractIntelligenceAgent {
				@@ -81,7 +79,7 @@ public class Mob extends AbstractIntelligenceAgent {
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    protected  int  dbID ;  //the database ID
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    private  int  currentID ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    private  int  ownerUID  =  0 ;  //only used by pets 
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    private  AbstractWorldObject  fearedObject  =  null ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    private  long  lastAttackTime  =  0 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    private  int  lastMobPowerToken  =  0 ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -100,20 +98,6 @@ public class Mob extends AbstractIntelligenceAgent {
				@@ -100,20 +98,6 @@ public class Mob extends AbstractIntelligenceAgent {
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        this . gridObjectType  =  GridObjectType . DYNAMIC ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    / * *   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     *  Pet  Constructor   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     * /   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  Mob ( MobBase  mobBase ,  Guild  guild ,  Zone  parent ,  short  level ,  PlayerCharacter  owner ,  int  tableID )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        super ( mobBase . getFirstName ( ) ,  "" ,  ( short )  0 ,  ( short )  0 ,  ( short )  0 ,  ( short )  0 ,  ( short )  0 ,  level ,  0 ,  false ,  true ,  false ,  owner . getLoc ( ) ,  owner . getLoc ( ) ,  owner . getFaceDir ( ) ,  ( short )  mobBase . getHealthMax ( ) ,  ( short )  0 ,  ( short )  0 ,  guild ,  ( byte )  0 ,  tableID ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        this . dbID  =  tableID ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        this . loadID  =  mobBase . getObjectUUID ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        this . mobBase  =  mobBase ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        this . parentZone  =  parent ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        this . parentZoneUUID  =  ( parent  ! =  null )  ?  parent . getObjectUUID ( )  :  0 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        this . ownerUID  =  owner . getObjectUUID ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        this . behaviourType  =  Enum . MobBehaviourType . Pet1 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    / * *   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     *  ResultSet  Constructor   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -460,130 +444,6 @@ public class Mob extends AbstractIntelligenceAgent {
				@@ -460,130 +444,6 @@ public class Mob extends AbstractIntelligenceAgent {
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return  mob ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  static  Mob  createPet ( int  loadID ,  Guild  guild ,  Zone  parent ,  PlayerCharacter  owner ,  short  level )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        MobBase  mobBase  =  MobBase . getMobBase ( loadID ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        Mob  mob  =  null ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( mobBase  = =  null  | |  owner  = =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  null ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        createLock . writeLock ( ) . lock ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        level  + =  20 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        try  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            mob  =  new  Mob ( mobBase ,  guild ,  parent ,  level ,  owner ,  0 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            if  ( mob . mobBase  = =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                return  null ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            mob . runAfterLoad ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            Vector3fImmutable  loc  =  owner . getLoc ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            DbManager . addToCache ( mob ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            mob . setPet ( owner ,  true ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            mob . setWalkMode ( false ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        }  catch  ( Exception  e )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            Logger . error ( e ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        }  finally  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            createLock . writeLock ( ) . unlock ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        parent . zoneMobSet . add ( mob ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        mob . level  =  level ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        mob . healthMax  =  mob . getMobBase ( ) . getHealthMax ( )  *  ( mob . level  *  0 . 5f ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        mob . health . set ( mob . healthMax ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return  mob ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  static  Mob  getMob ( int  id )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( id  = =  0 )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  null ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        Mob  mob  =  ( Mob )  DbManager . getFromCache ( GameObjectType . Mob ,  id ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( mob  ! =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  mob ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return  DbManager . MobQueries . GET_MOB ( id ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  static  Mob  getFromCache ( int  id )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return  ( Mob )  DbManager . getFromCache ( GameObjectType . Mob ,  id ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    private  static  float  getModifiedAmount ( CharacterSkill  skill )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( skill  = =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  0f ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return  skill . getModifiedAmount ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  static  void  HandleAssistedAggro ( PlayerCharacter  source ,  PlayerCharacter  target )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        HashSet < AbstractWorldObject >  mobsInRange  =  WorldGrid . getObjectsInRangePartial ( source ,  MobAIThread . AI_DROP_AGGRO_RANGE ,  MBServerStatics . MASK_MOB ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        for  ( AbstractWorldObject  awo  :  mobsInRange )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            Mob  mob  =  ( Mob )  awo ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            //Mob is not attacking anyone, skip.
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            if  ( mob . getCombatTarget ( )  = =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                continue ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            //Mob not attacking target's target, let's not be failmu and skip this target.
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            if  ( mob . getCombatTarget ( )  ! =  target )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                continue ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            //target is mob's combat target, LETS GO.
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            if  ( source . getHateValue ( )  >  target . getHateValue ( ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                mob . setCombatTarget ( source ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  static  void  submitUpgradeJob ( Mob  mob )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( mob . getUpgradeDateTime ( )  = =  null )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            Logger . error ( "Failed to get Upgrade Date" ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        // Submit upgrade job for future date or current instant
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( mob . getUpgradeDateTime ( ) . isAfter ( DateTime . now ( ) ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            JobScheduler . getInstance ( ) . scheduleJob ( new  UpgradeNPCJob ( mob ) ,  mob . getUpgradeDateTime ( ) . getMillis ( ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        else   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            JobScheduler . getInstance ( ) . scheduleJob ( new  UpgradeNPCJob ( mob ) ,  0 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  static  int  getUpgradeTime ( Mob  mob )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( mob . getRank ( )  <  7 )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  ( mob . getRank ( )  *  8 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return  0 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  static  int  getUpgradeCost ( Mob  mob )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        int  upgradeCost ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        upgradeCost  =  Integer . MAX_VALUE ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( mob . getRank ( )  <  7 )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  ( mob . getRank ( )  *  100650 )  +  21450 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return  upgradeCost ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  static  void  setUpgradeDateTime ( Mob  mob ,  DateTime  upgradeDateTime )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( ! DbManager . MobQueries . updateUpgradeTime ( mob ,  upgradeDateTime ) )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            Logger . error ( "Failed to set upgradeTime for building "  +  mob . currentID ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        mob . upgradeDateTime  =  upgradeDateTime ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  static  synchronized  Mob  createGuardMinion ( Mob  guardCaptain ,  short  level ,  String  minionName )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        Mob  minionMobile ;   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -688,6 +548,122 @@ public class Mob extends AbstractIntelligenceAgent {
				@@ -688,6 +548,122 @@ public class Mob extends AbstractIntelligenceAgent {
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return  siegeMinion ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  static  Mob  createPetMinion ( int  loadID ,  Guild  guild ,  Zone  parent ,  PlayerCharacter  petOwner ,  short  level )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        Mob  petMinion  =  new  Mob ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( petOwner  = =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  null ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        createLock . writeLock ( ) . lock ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        petMinion . level  =  level ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        petMinion . loadID  =  loadID ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        petMinion . loc  =  petOwner . getLoc ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        petMinion . guardCaptain  =  petOwner ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        petMinion . parentZoneUUID  =  parent . getObjectUUID ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        petMinion . walkMode  =  false ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        petMinion . healthMax  =  petMinion . getMobBase ( ) . getHealthMax ( )  *  ( petMinion . level  *  0 . 5f ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        petMinion . health . set ( petMinion . healthMax ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        petMinion . runAfterLoad ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        DbManager . addToCache ( petMinion ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        createLock . writeLock ( ) . unlock ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return  petMinion ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  static  Mob  getMob ( int  id )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( id  = =  0 )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  null ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        Mob  mob  =  ( Mob )  DbManager . getFromCache ( GameObjectType . Mob ,  id ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( mob  ! =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  mob ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return  DbManager . MobQueries . GET_MOB ( id ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  static  Mob  getFromCache ( int  id )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return  ( Mob )  DbManager . getFromCache ( GameObjectType . Mob ,  id ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    private  static  float  getModifiedAmount ( CharacterSkill  skill )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( skill  = =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  0f ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return  skill . getModifiedAmount ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  static  void  HandleAssistedAggro ( PlayerCharacter  source ,  PlayerCharacter  target )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        HashSet < AbstractWorldObject >  mobsInRange  =  WorldGrid . getObjectsInRangePartial ( source ,  MobAIThread . AI_DROP_AGGRO_RANGE ,  MBServerStatics . MASK_MOB ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        for  ( AbstractWorldObject  awo  :  mobsInRange )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            Mob  mob  =  ( Mob )  awo ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            //Mob is not attacking anyone, skip.
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            if  ( mob . getCombatTarget ( )  = =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                continue ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            //Mob not attacking target's target, let's not be failmu and skip this target.
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            if  ( mob . getCombatTarget ( )  ! =  target )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                continue ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            //target is mob's combat target, LETS GO.
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            if  ( source . getHateValue ( )  >  target . getHateValue ( ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                mob . setCombatTarget ( source ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  static  void  submitUpgradeJob ( Mob  mob )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( mob . getUpgradeDateTime ( )  = =  null )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            Logger . error ( "Failed to get Upgrade Date" ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        // Submit upgrade job for future date or current instant
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( mob . getUpgradeDateTime ( ) . isAfter ( DateTime . now ( ) ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            JobScheduler . getInstance ( ) . scheduleJob ( new  UpgradeNPCJob ( mob ) ,  mob . getUpgradeDateTime ( ) . getMillis ( ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        else   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            JobScheduler . getInstance ( ) . scheduleJob ( new  UpgradeNPCJob ( mob ) ,  0 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  static  int  getUpgradeTime ( Mob  mob )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( mob . getRank ( )  <  7 )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  ( mob . getRank ( )  *  8 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return  0 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  static  int  getUpgradeCost ( Mob  mob )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        int  upgradeCost ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        upgradeCost  =  Integer . MAX_VALUE ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( mob . getRank ( )  <  7 )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  ( mob . getRank ( )  *  100650 )  +  21450 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return  upgradeCost ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  static  void  setUpgradeDateTime ( Mob  mob ,  DateTime  upgradeDateTime )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( ! DbManager . MobQueries . updateUpgradeTime ( mob ,  upgradeDateTime ) )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            Logger . error ( "Failed to set upgradeTime for building "  +  mob . currentID ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        mob . upgradeDateTime  =  upgradeDateTime ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    / *   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					     *  Getters   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -764,24 +740,16 @@ public class Mob extends AbstractIntelligenceAgent {
				@@ -764,24 +740,16 @@ public class Mob extends AbstractIntelligenceAgent {
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return  this . guild . getObjectUUID ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    @Override   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  PlayerCharacter  getOwner ( )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( ! this . isPet ( ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  null ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( this . ownerUID  = =  0 )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  null ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return  PlayerCharacter . getFromCache ( this . ownerUID ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return  ( PlayerCharacter )  this . guardCaptain ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  void  setOwner ( PlayerCharacter  value )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( value  = =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            this . ownerUID  =  0 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        else   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            this . ownerUID  =  value . getObjectUUID ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        this . guardCaptain  =  value ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  void  setFearedObject ( AbstractWorldObject  awo )  {