Browse Source

new mob AI

lakebane-recovery
FatBoy-DOTC 4 days ago
parent
commit
16d4c9530e
  1. 58
      src/engine/mobileAI/MobHandlers/MobHandler.java

58
src/engine/mobileAI/MobHandlers/MobHandler.java

@ -7,6 +7,7 @@ import engine.gameManager.PowersManager; @@ -7,6 +7,7 @@ import engine.gameManager.PowersManager;
import engine.gameManager.ZoneManager;
import engine.math.Vector3f;
import engine.math.Vector3fImmutable;
import engine.mobileAI.MobAI;
import engine.mobileAI.Threads.MobAIThread;
import engine.mobileAI.utilities.CombatUtilities;
import engine.mobileAI.utilities.MovementUtilities;
@ -32,7 +33,6 @@ public class MobHandler { @@ -32,7 +33,6 @@ public class MobHandler {
if(mob.combatTarget == null || !mob.combatTarget.isAlive()){
CheckForAggro(mob);
return;
}
if(mob.combatTarget != null)
CheckToDropAggro(mob);
@ -45,7 +45,7 @@ public class MobHandler { @@ -45,7 +45,7 @@ public class MobHandler {
}
public static void CheckToDropAggro(Mob mob){
if(mob.loc.distanceSquared(mob.combatTarget.loc) > (64f * 64f))
if(mob.loc.distanceSquared(mob.combatTarget.loc) > (128f * 128f))
mob.setCombatTarget(null);
}
@ -100,6 +100,12 @@ public class MobHandler { @@ -100,6 +100,12 @@ public class MobHandler {
}
public static void CheckForAggro(Mob mob){
switch(mob.BehaviourType){
case SimpleStandingGuard:
case Simple:
case None:
return;
}
PlayerCharacter tar = null;
for(int id : mob.playerAgroMap.keySet()){
PlayerCharacter target = PlayerCharacter.getFromCache(id);
@ -107,6 +113,8 @@ public class MobHandler { @@ -107,6 +113,8 @@ public class MobHandler {
if(MobCanAggro(mob,target))
tar = target;
}
if(tar != null)
mob.setCombatTarget(tar);
}
public static Boolean MobCanAggro(Mob mob, PlayerCharacter loadedPlayer){
@ -136,21 +144,27 @@ public class MobHandler { @@ -136,21 +144,27 @@ public class MobHandler {
if(!mob.isAlive())
return;
mob.updateLocation();
if(mob.combatTarget == null){
//patrol
Patrol(mob);
}else{
//combat movement
if(CombatUtilities.inRangeToAttack(mob,mob.combatTarget))
if(CombatUtilities.inRangeToAttack(mob,mob.combatTarget)) {
return;
else
MovementUtilities.aiMove(mob,mob.combatTarget.loc,false);
}else {
MovementUtilities.moveToLocation(mob, mob.combatTarget.loc, mob.getRange());
}
}
}
public static void CheckToAttack(Mob mob){
try {
if(mob.getLastAttackTime() > System.currentTimeMillis())
return;
PlayerCharacter target = (PlayerCharacter) mob.combatTarget;
if (!mob.canSee(target)) {
@ -158,8 +172,8 @@ public class MobHandler { @@ -158,8 +172,8 @@ public class MobHandler {
return;
}
if (mob.BehaviourType.callsForHelp)
MobCallForHelp(mob);
//if (mob.BehaviourType.callsForHelp)
MobCallForHelp(mob);
if (mob.isMoving() && mob.getRange() > 20)
return;
@ -196,32 +210,17 @@ public class MobHandler { @@ -196,32 +210,17 @@ public class MobHandler {
public static void MobCallForHelp(Mob mob) {
try {
boolean callGotResponse = false;
if (mob.nextCallForHelp == 0)
mob.nextCallForHelp = System.currentTimeMillis();
if (mob.nextCallForHelp < System.currentTimeMillis())
return;
//mob sends call for help message
ChatManager.chatSayInfo(null, mob.getName() + " calls for help!");
Zone mobCamp = mob.getParentZone();
for (Mob helper : mobCamp.zoneMobSet) {
if (helper.BehaviourType.respondsToCallForHelp && helper.BehaviourType.BehaviourHelperType.equals(mob.BehaviourType)) {
helper.setCombatTarget(mob.getCombatTarget());
callGotResponse = true;
}
}
if(helper.equals(mob))
continue;
//wait 60 seconds to call for help again
if(helper.combatTarget != null)
continue;
if (callGotResponse)
mob.nextCallForHelp = System.currentTimeMillis() + 60000;
helper.setCombatTarget(mob.getCombatTarget());
}
} catch (Exception e) {
//(mob.getObjectUUID() + " " + mob.getName() + " Failed At: MobCallForHelp" + " " + e.getMessage());
@ -232,6 +231,8 @@ public class MobHandler { @@ -232,6 +231,8 @@ public class MobHandler {
try {
if(mob.isMoving())
return;
//make sure mob is out of combat stance
int patrolDelay = ThreadLocalRandom.current().nextInt((int) (MobAIThread.AI_PATROL_DIVISOR * 0.5f), MobAIThread.AI_PATROL_DIVISOR) + MobAIThread.AI_PATROL_DIVISOR;
@ -275,4 +276,5 @@ public class MobHandler { @@ -275,4 +276,5 @@ public class MobHandler {
//(mob.getObjectUUID() + " " + mob.getName() + " Failed At: CheckToSendMobHome" + " " + e.getMessage());
}
}
}

Loading…
Cancel
Save