| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -394,21 +394,7 @@ public class MobAI { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            } | 
					 | 
					 | 
					 | 
					            } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            //no players loaded, no need to proceed
 | 
					 | 
					 | 
					 | 
					            //no players loaded, no need to proceed
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if (mob.playerAgroMap.isEmpty()) { | 
					 | 
					 | 
					 | 
					            if (mob.playerAgroMap.isEmpty()) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                //attempt to reload agro map
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                HashSet<AbstractWorldObject> players = WorldGrid.getObjectsInRangePartial(mob.loc, mob.getAggroRange(), MBServerStatics.MASK_PLAYER); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                if(players.size() > 0){ | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    for(AbstractWorldObject player : players){ | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        if(!mob.playerAgroMap.containsKey(player.getObjectUUID())) { | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                            PlayerCharacter pc = (PlayerCharacter) player; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                            mob.playerAgroMap.put(pc.getObjectUUID(), 0.0f); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        } | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    } | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                } | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                if(mob.getCombatTarget() != null) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    mob.setCombatTarget(null); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                return; | 
					 | 
					 | 
					 | 
					                return; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            } | 
					 | 
					 | 
					 | 
					            } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -441,6 +427,7 @@ public class MobAI { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if (mob.isMoving()) { | 
					 | 
					 | 
					 | 
					            if (mob.isMoving()) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                mob.updateLocation(); | 
					 | 
					 | 
					 | 
					                mob.updateLocation(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            } | 
					 | 
					 | 
					 | 
					            } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            boolean combatState = mob.isCombat(); | 
					 | 
					 | 
					 | 
					            boolean combatState = mob.isCombat(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            mob.setCombat(mob.combatTarget != null); | 
					 | 
					 | 
					 | 
					            mob.setCombat(mob.combatTarget != null); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if(combatState != mob.isCombat()){ | 
					 | 
					 | 
					 | 
					            if(combatState != mob.isCombat()){ | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -449,6 +436,7 @@ public class MobAI { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                rwss.setPlayer(mob); | 
					 | 
					 | 
					 | 
					                rwss.setPlayer(mob); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                DispatchMessage.sendToAllInRange(mob, rwss); | 
					 | 
					 | 
					 | 
					                DispatchMessage.sendToAllInRange(mob, rwss); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            } | 
					 | 
					 | 
					 | 
					            } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            boolean walking = mob.isWalk(); | 
					 | 
					 | 
					 | 
					            boolean walking = mob.isWalk(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            mob.setWalkMode(mob.combatTarget == null); | 
					 | 
					 | 
					 | 
					            mob.setWalkMode(mob.combatTarget == null); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if(walking != mob.isWalk()){ | 
					 | 
					 | 
					 | 
					            if(walking != mob.isWalk()){ | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -490,34 +478,28 @@ public class MobAI { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if (!aiAgent.isAlive()) | 
					 | 
					 | 
					 | 
					            if (!aiAgent.isAlive()) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                return; | 
					 | 
					 | 
					 | 
					                return; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if(!pets) { | 
					 | 
					 | 
					 | 
					            if(!pets) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                ConcurrentHashMap<Integer, Float> loadedPlayers = aiAgent.playerAgroMap; | 
					 | 
					 | 
					 | 
					                ConcurrentHashMap<Integer, Float> loadedPlayers = aiAgent.playerAgroMap; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                for (Integer playerEntry : loadedPlayers.keySet()) { | 
					 | 
					 | 
					 | 
					                for (Integer playerEntry : loadedPlayers.keySet()) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    PlayerCharacter loadedPlayer = PlayerCharacter.getFromCache(playerEntry); | 
					 | 
					 | 
					 | 
					                    PlayerCharacter loadedPlayer = PlayerCharacter.getFromCache(playerEntry); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    //Player is null, let's remove them from the list.
 | 
					 | 
					 | 
					 | 
					                    //Player is null, let's remove them from the list.
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    if (loadedPlayer == null) { | 
					 | 
					 | 
					 | 
					                    if (loadedPlayer == null) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        loadedPlayers.remove(playerEntry); | 
					 | 
					 | 
					 | 
					                        loadedPlayers.remove(playerEntry); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        continue; | 
					 | 
					 | 
					 | 
					                        continue; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    } | 
					 | 
					 | 
					 | 
					                    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    //Player is Dead, Mob no longer needs to attempt to aggro. Remove them from aggro map.
 | 
					 | 
					 | 
					 | 
					                    //Player is Dead, Mob no longer needs to attempt to aggro. Remove them from aggro map.
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    if (!loadedPlayer.isAlive() || loadedPlayer.getHidden() > 0) { | 
					 | 
					 | 
					 | 
					                    if (!loadedPlayer.isAlive() || loadedPlayer.getHidden() > 0) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        loadedPlayers.remove(playerEntry); | 
					 | 
					 | 
					 | 
					                        loadedPlayers.remove(playerEntry); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        continue; | 
					 | 
					 | 
					 | 
					                        continue; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    } | 
					 | 
					 | 
					 | 
					                    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    //Can't see target, skip aggro.
 | 
					 | 
					 | 
					 | 
					                    //Can't see target, skip aggro.
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    if (!aiAgent.canSee(loadedPlayer)) | 
					 | 
					 | 
					 | 
					                    if (!aiAgent.canSee(loadedPlayer)) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        continue; | 
					 | 
					 | 
					 | 
					                        continue; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    // No aggro for this race type
 | 
					 | 
					 | 
					 | 
					                    // No aggro for this race type
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    if (aiAgent.notEnemy.size() > 0 && aiAgent.notEnemy.contains(loadedPlayer.getRace().getRaceType().getMonsterType())) | 
					 | 
					 | 
					 | 
					                    if (aiAgent.notEnemy.size() > 0 && aiAgent.notEnemy.contains(loadedPlayer.getRace().getRaceType().getMonsterType())) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        continue; | 
					 | 
					 | 
					 | 
					                        continue; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -536,7 +518,7 @@ public class MobAI { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                //look for pets to aggro if no players found to aggro
 | 
					 | 
					 | 
					 | 
					                //look for pets to aggro if no players found to aggro
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                HashSet<AbstractWorldObject> awoList = WorldGrid.getObjectsInRangePartial(aiAgent, MobAIThread.AI_BASE_AGGRO_RANGE, MBServerStatics.MASK_PET); | 
					 | 
					 | 
					 | 
					                HashSet<AbstractWorldObject> awoList = WorldGrid.getObjectsInRangePartial(aiAgent, MobAIThread.AI_BASE_AGGRO_RANGE, MBServerStatics.MASK_MOB); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                for (AbstractWorldObject awoMob : awoList) { | 
					 | 
					 | 
					 | 
					                for (AbstractWorldObject awoMob : awoList) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -545,6 +527,9 @@ public class MobAI { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    if (aiAgent.equals(awoMob)) | 
					 | 
					 | 
					 | 
					                    if (aiAgent.equals(awoMob)) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        continue; | 
					 | 
					 | 
					 | 
					                        continue; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                    if(!((Mob)awoMob).isPet()) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                        continue; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    Mob aggroMob = (Mob) awoMob; | 
					 | 
					 | 
					 | 
					                    Mob aggroMob = (Mob) awoMob; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    aiAgent.setCombatTarget(aggroMob); | 
					 | 
					 | 
					 | 
					                    aiAgent.setCombatTarget(aggroMob); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    return; | 
					 | 
					 | 
					 | 
					                    return; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -921,24 +906,16 @@ public class MobAI { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            } | 
					 | 
					 | 
					 | 
					            } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if (mob.behaviourType.isAgressive) { | 
					 | 
					 | 
					 | 
					            if (mob.behaviourType.isAgressive) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                //AbstractWorldObject newTarget = ChangeTargetFromHateValue(mob);
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                //if (newTarget != null)
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                //    mob.setCombatTarget(newTarget);
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                //else {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                if (mob.getCombatTarget() == null) { | 
					 | 
					 | 
					 | 
					                if (mob.getCombatTarget() == null) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    if (mob.behaviourType == Enum.MobBehaviourType.HamletGuard) { | 
					 | 
					 | 
					 | 
					                    if (mob.behaviourType == Enum.MobBehaviourType.HamletGuard) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        SafeGuardAggro(mob);  //safehold guard
 | 
					 | 
					 | 
					 | 
					                        SafeGuardAggro(mob);  //safehold guard
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        }else { | 
					 | 
					 | 
					 | 
					                    } else { | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                            CheckForAggro(mob,false);   //normal aggro
 | 
					 | 
					 | 
					 | 
					                        CheckForAggro(mob, false);   //normal aggro
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                            if(mob.combatTarget == null) | 
					 | 
					 | 
					 | 
					                        if (mob.combatTarget == null) | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                CheckForAggro(mob,true); // look for pets if no players to aggro
 | 
					 | 
					 | 
					 | 
					                            CheckForAggro(mob, true); // look for pets if no players to aggro
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    } | 
					 | 
					 | 
					 | 
					                    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                } | 
					 | 
					 | 
					 | 
					                } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            } | 
					 | 
					 | 
					 | 
					            } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            //}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            //check if mob can move for patrol or moving to target
 | 
					 | 
					 | 
					 | 
					            //check if mob can move for patrol or moving to target
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |