|  |  |  | @ -63,7 +63,6 @@ public class MobileFSM {@@ -63,7 +63,6 @@ public class MobileFSM { | 
			
		
	
		
			
				
					|  |  |  |  |             case Idle: | 
			
		
	
		
			
				
					|  |  |  |  |                 if (mob.isAlive()) | 
			
		
	
		
			
				
					|  |  |  |  |                     mob.updateLocation(); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |                 if (mob.isPlayerGuard()) { | 
			
		
	
		
			
				
					|  |  |  |  |                     guardAwake(mob); | 
			
		
	
		
			
				
					|  |  |  |  |                     break; | 
			
		
	
	
		
			
				
					|  |  |  | @ -167,9 +166,6 @@ public class MobileFSM {@@ -167,9 +166,6 @@ public class MobileFSM { | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         return false; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |     public static Mob getMobile(int mobileID) { | 
			
		
	
		
			
				
					|  |  |  |  |         return Mob.getFromCache(mobileID); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |     private static void idle(Mob mob) { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (mob.getLoc().distanceSquared2D(mob.getBindLoc()) > sqr(2000)) { | 
			
		
	
	
		
			
				
					|  |  |  | @ -1070,31 +1066,6 @@ public class MobileFSM {@@ -1070,31 +1066,6 @@ public class MobileFSM { | 
			
		
	
		
			
				
					|  |  |  |  |             return; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         HashMap<Integer, Integer> staticPowers = aiAgent.getMobBase().getStaticPowers(); | 
			
		
	
		
			
				
					|  |  |  |  |         if (staticPowers != null && !staticPowers.isEmpty()) { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             int chance = ThreadLocalRandom.current().nextInt(100); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             if (chance <= MBServerStatics.AI_POWER_DIVISOR) { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |                 ArrayList<Integer> powerList = new ArrayList<>(); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |                 for (Integer key : staticPowers.keySet()) { | 
			
		
	
		
			
				
					|  |  |  |  |                     powerList.add(key); | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |                 int randomPower = ThreadLocalRandom.current().nextInt(powerList.size()); | 
			
		
	
		
			
				
					|  |  |  |  |                 int powerToken = powerList.get(randomPower); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |                 PowersBase pb = PowersManager.getPowerByToken(powerToken); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |                 if (pb != null) | 
			
		
	
		
			
				
					|  |  |  |  |                     PowersManager.useMobPower(aiAgent, aggroTarget, pb, staticPowers.get(powerToken)); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |                 return; | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (!MovementUtilities.inRangeOfBindLocation(aiAgent)) { | 
			
		
	
		
			
				
					|  |  |  |  |             aiAgent.setCombatTarget(null); | 
			
		
	
		
			
				
					|  |  |  |  |             aiAgent.setAggroTargetID(0); | 
			
		
	
	
		
			
				
					|  |  |  | @ -1213,14 +1184,6 @@ public class MobileFSM {@@ -1213,14 +1184,6 @@ public class MobileFSM { | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         aiAgent.setState(STATE.Awake); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |     public static void goHome(Mob aiAgent, boolean walk) { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (aiAgent.getState() != STATE.Dead) { | 
			
		
	
		
			
				
					|  |  |  |  |             aiAgent.setWalkingHome(walk); | 
			
		
	
		
			
				
					|  |  |  |  |             aiAgent.setAggroTargetID(0); | 
			
		
	
		
			
				
					|  |  |  |  |             aiAgent.setState(STATE.Home); | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |     private static void dead(Mob aiAgent) { | 
			
		
	
		
			
				
					|  |  |  |  |         //Despawn Timer with Loot currently in inventory.
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (aiAgent.getCharItemManager().getInventoryCount() > 0) { | 
			
		
	
	
		
			
				
					|  |  |  | @ -1633,21 +1596,6 @@ public class MobileFSM {@@ -1633,21 +1596,6 @@ public class MobileFSM { | 
			
		
	
		
			
				
					|  |  |  |  |         aiAgent.setCombatTarget(null); | 
			
		
	
		
			
				
					|  |  |  |  |         aiAgent.setState(STATE.Awake); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |     private static void guardRespawn(Mob aiAgent) { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (!aiAgent.canRespawn()) | 
			
		
	
		
			
				
					|  |  |  |  |             return; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (aiAgent.isPlayerGuard() && aiAgent.getNpcOwner() != null && !aiAgent.getNpcOwner().isAlive()) | 
			
		
	
		
			
				
					|  |  |  |  |             return; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         long spawnTime = aiAgent.getSpawnTime(); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (System.currentTimeMillis() > aiAgent.getDeathTime() + spawnTime) { | 
			
		
	
		
			
				
					|  |  |  |  |             aiAgent.respawn(); | 
			
		
	
		
			
				
					|  |  |  |  |             aiAgent.setState(STATE.Idle); | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |     private static void respawn(Mob aiAgent) { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (!aiAgent.canRespawn()) | 
			
		
	
	
		
			
				
					|  |  |  | @ -1682,13 +1630,6 @@ public class MobileFSM {@@ -1682,13 +1630,6 @@ public class MobileFSM { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         MovementUtilities.moveToLocation(aiAgent, aiAgent.getCombatTarget().getLoc(), aiAgent.getRange()); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |     private static void moveToWorldObjectRegion(Mob mob, AbstractWorldObject regionObject) { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (regionObject.getRegion() == null) | 
			
		
	
		
			
				
					|  |  |  |  |             return; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         MovementManager.translocate(mob, regionObject.getLoc(), null); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |     public static boolean canCast(Mob mob) { | 
			
		
	
		
			
				
					|  |  |  |  |         if(mob == null){ | 
			
		
	
		
			
				
					|  |  |  |  |             return false; | 
			
		
	
	
		
			
				
					|  |  |  | 
 |