|  |  | @ -332,6 +332,11 @@ public class MobileFSM { | 
			
		
	
		
		
			
				
					
					|  |  |  |     public static void DetermineAction(Mob mob) { |  |  |  |     public static void DetermineAction(Mob mob) { | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (mob == null) |  |  |  |         if (mob == null) | 
			
		
	
		
		
			
				
					
					|  |  |  |             return; |  |  |  |             return; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         //pet cleanup for errant pets
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if(mob.BehaviourType.ordinal() == Enum.MobBehaviourType.Pet1.ordinal() && mob.getOwner() == null && mob.isSiege() == false){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 mob.despawn(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 WorldGrid.removeObject(mob); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (mob.despawned && mob.getMobBase().getLoadID() == 13171) { |  |  |  |         if (mob.despawned && mob.getMobBase().getLoadID() == 13171) { | 
			
		
	
		
		
			
				
					
					|  |  |  |             //trebuchet spawn handler
 |  |  |  |             //trebuchet spawn handler
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             CheckForRespawn(mob); |  |  |  |             CheckForRespawn(mob); | 
			
		
	
	
		
		
			
				
					|  |  | @ -358,7 +363,7 @@ public class MobileFSM { | 
			
		
	
		
		
			
				
					
					|  |  |  |             CheckForRespawn(mob); |  |  |  |             CheckForRespawn(mob); | 
			
		
	
		
		
			
				
					
					|  |  |  |             return; |  |  |  |             return; | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (mob.playerAgroMap.isEmpty() && mob.isPlayerGuard == false) |  |  |  |         if (mob.playerAgroMap.isEmpty() && mob.isPlayerGuard == false && mob.BehaviourType.ordinal() != Enum.MobBehaviourType.Pet1.ordinal()) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |             //no players loaded, no need to proceed
 |  |  |  |             //no players loaded, no need to proceed
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             return; |  |  |  |             return; | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (mob.isCombat() && mob.getCombatTarget() == null) { |  |  |  |         if (mob.isCombat() && mob.getCombatTarget() == null) { | 
			
		
	
	
		
		
			
				
					|  |  | @ -368,7 +373,9 @@ public class MobileFSM { | 
			
		
	
		
		
			
				
					
					|  |  |  |             DispatchMessage.sendToAllInRange(mob, rwss); |  |  |  |             DispatchMessage.sendToAllInRange(mob, rwss); | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |         mob.updateLocation(); |  |  |  |         mob.updateLocation(); | 
			
		
	
		
		
			
				
					
					|  |  |  |         CheckToSendMobHome(mob); |  |  |  |         if(mob.BehaviourType.ordinal() != Enum.MobBehaviourType.Pet1.ordinal()) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             CheckToSendMobHome(mob); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (mob.combatTarget != null && mob.combatTarget.isAlive() == false) { |  |  |  |         if (mob.combatTarget != null && mob.combatTarget.isAlive() == false) { | 
			
		
	
		
		
			
				
					
					|  |  |  |             mob.setCombatTarget(null); |  |  |  |             mob.setCombatTarget(null); | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
	
		
		
			
				
					|  |  | @ -568,10 +575,10 @@ public class MobileFSM { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     private static void chaseTarget(Mob mob) { |  |  |  |     private static void chaseTarget(Mob mob) { | 
			
		
	
		
		
			
				
					
					|  |  |  |         mob.updateMovementState(); |  |  |  |         mob.updateMovementState(); | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (mob.playerAgroMap.containsKey(mob.getCombatTarget().getObjectUUID()) == false) { |  |  |  |         //if (mob.playerAgroMap.containsKey(mob.getCombatTarget().getObjectUUID()) == false) {
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             mob.setCombatTarget(null); |  |  |  |         //    mob.setCombatTarget(null);
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             return; |  |  |  |         //    return;
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         //}
 | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         if (CombatUtilities.inRange2D(mob, mob.getCombatTarget(), mob.getRange()) == false) { |  |  |  |         if (CombatUtilities.inRange2D(mob, mob.getCombatTarget(), mob.getRange()) == false) { | 
			
		
	
		
		
			
				
					
					|  |  |  |             if (mob.getRange() > 15) { |  |  |  |             if (mob.getRange() > 15) { | 
			
		
	
		
		
			
				
					
					|  |  |  |                 mob.destination = mob.getCombatTarget().getLoc(); |  |  |  |                 mob.destination = mob.getCombatTarget().getLoc(); | 
			
		
	
	
		
		
			
				
					|  |  | 
 |