Browse Source

mobAI error tracing

master
FatBoy-DOTC 1 year ago
parent
commit
bab033be2d
  1. 185
      src/engine/ai/MobileFSM.java
  2. 35
      src/engine/ai/MobileFSMManager.java
  3. 44
      src/engine/devcmd/cmds/AuditAI.java
  4. 1
      src/engine/gameManager/DevCmdManager.java

185
src/engine/ai/MobileFSM.java

@ -23,6 +23,8 @@ import engine.objects.*;
import engine.powers.ActionsBase; import engine.powers.ActionsBase;
import engine.powers.PowersBase; import engine.powers.PowersBase;
import engine.server.MBServerStatics; import engine.server.MBServerStatics;
import org.pmw.tinylog.Logger;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map.Entry; import java.util.Map.Entry;
@ -35,40 +37,43 @@ public class MobileFSM {
private static void AttackTarget(Mob mob, AbstractWorldObject target) { private static void AttackTarget(Mob mob, AbstractWorldObject target) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.ATTACKTARGET; try {
if (mob == null) if (mob == null)
return; return;
if (target == null || !target.isAlive()) { if (target == null || !target.isAlive()) {
mob.setCombatTarget(null); mob.setCombatTarget(null);
return;
}
if (target.getObjectType() == Enum.GameObjectType.PlayerCharacter && canCast(mob)) {
if (MobCast(mob)) {
mob.updateLocation();
return; return;
} }
if (target.getObjectType() == Enum.GameObjectType.PlayerCharacter && canCast(mob)) {
if (MobCast(mob)) {
mob.updateLocation();
return;
}
}
if (!CombatUtilities.inRangeToAttack(mob, target))
return;
switch (target.getObjectType()) {
case PlayerCharacter:
PlayerCharacter targetPlayer = (PlayerCharacter) target;
AttackPlayer(mob, targetPlayer);
break;
case Building:
Building targetBuilding = (Building) target;
AttackBuilding(mob, targetBuilding);
break;
case Mob:
Mob targetMob = (Mob) target;
AttackMob(mob, targetMob);
break;
}
mob.updateLocation();
} catch(Exception e){
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: AttackTarget" + " " + e.getMessage());
} }
if (!CombatUtilities.inRangeToAttack(mob, target))
return;
switch (target.getObjectType()) {
case PlayerCharacter:
PlayerCharacter targetPlayer = (PlayerCharacter) target;
AttackPlayer(mob, targetPlayer);
break;
case Building:
Building targetBuilding = (Building) target;
AttackBuilding(mob, targetBuilding);
break;
case Mob:
Mob targetMob = (Mob) target;
AttackMob(mob, targetMob);
break;
}
mob.updateLocation();
} }
public static void AttackPlayer(Mob mob, PlayerCharacter target) { public static void AttackPlayer(Mob mob, PlayerCharacter target) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.ATTACKPLAYER; try{
if (!mob.canSee(target)) { if (!mob.canSee(target)) {
mob.setCombatTarget(null); mob.setCombatTarget(null);
return; return;
@ -114,10 +119,13 @@ public class MobileFSM {
target.getPet().setCombatTarget(mob); target.getPet().setCombatTarget(mob);
} }
} }
} catch(Exception e){
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: AttackPlayer" + " " + e.getMessage());
}
} }
public static void AttackBuilding(Mob mob, Building target) { public static void AttackBuilding(Mob mob, Building target) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.ATTACKBUILDING; try{
if (target.getRank() == -1 || !target.isVulnerable() || BuildingManager.getBuildingFromCache(target.getObjectUUID()) == null) { if (target.getRank() == -1 || !target.isVulnerable() || BuildingManager.getBuildingFromCache(target.getObjectUUID()) == null) {
mob.setCombatTarget(null); mob.setCombatTarget(null);
return; return;
@ -156,10 +164,13 @@ public class MobileFSM {
ppm.setRange(50); ppm.setRange(50);
DispatchMessage.dispatchMsgToInterestArea(mob, ppm, DispatchChannel.SECONDARY, MBServerStatics.CHARACTER_LOAD_RANGE, false, false); DispatchMessage.dispatchMsgToInterestArea(mob, ppm, DispatchChannel.SECONDARY, MBServerStatics.CHARACTER_LOAD_RANGE, false, false);
} }
} catch(Exception e){
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: AttackBuilding" + " " + e.getMessage());
}
} }
public static void AttackMob(Mob mob, Mob target) { public static void AttackMob(Mob mob, Mob target) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.ATTACKMOB; try{
if (mob.getRange() >= 30 && mob.isMoving()) if (mob.getRange() >= 30 && mob.isMoving())
return; return;
//no weapons, default mob attack speed 3 seconds. //no weapons, default mob attack speed 3 seconds.
@ -187,10 +198,13 @@ public class MobileFSM {
target.combatTarget = mob; target.combatTarget = mob;
} }
} }
} catch(Exception e){
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: AttackMob" + " " + e.getMessage());
}
} }
private static void Patrol(Mob mob) { private static void Patrol(Mob mob) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.PATROL; try{
//make sure mob is out of combat stance //make sure mob is out of combat stance
if (mob.isCombat() && mob.getCombatTarget() == null) { if (mob.isCombat() && mob.getCombatTarget() == null) {
mob.setCombat(false); mob.setCombat(false);
@ -237,10 +251,13 @@ public class MobileFSM {
} }
} }
} }
} catch(Exception e){
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: AttackTarget" + " " + e.getMessage());
}
} }
public static boolean canCast(Mob mob) { public static boolean canCast(Mob mob) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.CANCAST; try{
// Performs validation to determine if a // Performs validation to determine if a
// mobile in the proper state to cast. // mobile in the proper state to cast.
if (mob == null) if (mob == null)
@ -259,10 +276,14 @@ public class MobileFSM {
mob.nextCastTime = System.currentTimeMillis(); mob.nextCastTime = System.currentTimeMillis();
return mob.nextCastTime <= System.currentTimeMillis(); return mob.nextCastTime <= System.currentTimeMillis();
} catch(Exception e){
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: canCast" + " " + e.getMessage());
}
return false;
} }
public static boolean MobCast(Mob mob) { public static boolean MobCast(Mob mob) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.MOBCAST; try{
// Method picks a random spell from a mobile's list of powers // Method picks a random spell from a mobile's list of powers
// and casts it on the current target (or itself). Validation // and casts it on the current target (or itself). Validation
// (including empty lists) is done previously within canCast(); // (including empty lists) is done previously within canCast();
@ -323,11 +344,14 @@ public class MobileFSM {
mob.nextCastTime = System.currentTimeMillis() + (long)((mobPower.getCooldown() + (MobileFSMManager.AI_POWER_DIVISOR * 1000)) * randomCooldown); mob.nextCastTime = System.currentTimeMillis() + (long)((mobPower.getCooldown() + (MobileFSMManager.AI_POWER_DIVISOR * 1000)) * randomCooldown);
return true; return true;
} }
} catch(Exception e){
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: MobCast" + " " + e.getMessage());
}
return false; return false;
} }
public static void MobCallForHelp(Mob mob) { public static void MobCallForHelp(Mob mob) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.MOBCALLFORHELP; try{
boolean callGotResponse = false; boolean callGotResponse = false;
if (mob.nextCallForHelp == 0) { if (mob.nextCallForHelp == 0) {
mob.nextCallForHelp = System.currentTimeMillis(); mob.nextCallForHelp = System.currentTimeMillis();
@ -346,10 +370,13 @@ public class MobileFSM {
if (callGotResponse) if (callGotResponse)
//wait 60 seconds to call for help again //wait 60 seconds to call for help again
mob.nextCallForHelp = System.currentTimeMillis() + 60000; mob.nextCallForHelp = System.currentTimeMillis() + 60000;
} catch(Exception e){
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: MobCallForHelp" + " " + e.getMessage());
}
} }
public static void DetermineAction(Mob mob) { public static void DetermineAction(Mob mob) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.DETERMINEACTION; try{
//always check the respawn que, respawn 1 mob max per second to not flood the client //always check the respawn que, respawn 1 mob max per second to not flood the client
if (mob == null) if (mob == null)
@ -436,10 +463,13 @@ public class MobileFSM {
DefaultLogic(mob); DefaultLogic(mob);
break; break;
} }
} catch(Exception e){
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: DetermineAction" + " " + e.getMessage());
}
} }
private static void CheckForAggro(Mob aiAgent) { private static void CheckForAggro(Mob aiAgent) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.CHECKFORAGRO; try{
//looks for and sets mobs combatTarget //looks for and sets mobs combatTarget
if (!aiAgent.isAlive()) if (!aiAgent.isAlive())
return; return;
@ -484,10 +514,13 @@ public class MobileFSM {
return; return;
} }
} }
} catch(Exception e){
Logger.info(aiAgent.getObjectUUID() + " " + aiAgent.getName() + " Failed At: CheckForAggro" + " " + e.getMessage());
}
} }
private static void CheckMobMovement(Mob mob) { private static void CheckMobMovement(Mob mob) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.CHECKMOBMOVEMENT; try{
if (!MovementUtilities.canMove(mob)) if (!MovementUtilities.canMove(mob))
return; return;
mob.updateLocation(); mob.updateLocation();
@ -531,10 +564,13 @@ public class MobileFSM {
} }
break; break;
} }
} catch(Exception e){
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: CheckMobMovement" + " " + e.getMessage());
}
} }
private static void CheckForRespawn(Mob aiAgent) { private static void CheckForRespawn(Mob aiAgent) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.CHECKFORRESPAWN; try{
if (aiAgent.deathTime == 0) { if (aiAgent.deathTime == 0) {
aiAgent.setDeathTime(System.currentTimeMillis()); aiAgent.setDeathTime(System.currentTimeMillis());
return; return;
@ -570,10 +606,13 @@ public class MobileFSM {
//aiAgent.respawn(); //aiAgent.respawn();
aiAgent.getParentZone().respawnQue.add(aiAgent); aiAgent.getParentZone().respawnQue.add(aiAgent);
} }
} catch(Exception e){
Logger.info(aiAgent.getObjectUUID() + " " + aiAgent.getName() + " Failed At: CheckForRespawn" + " " + e.getMessage());
}
} }
public static void CheckForAttack(Mob mob) { public static void CheckForAttack(Mob mob) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.CHECKFORATTACK; try{
//checks if mob can attack based on attack timer and range //checks if mob can attack based on attack timer and range
if (mob.isAlive() == false) if (mob.isAlive() == false)
return; return;
@ -598,10 +637,13 @@ public class MobileFSM {
} }
if (System.currentTimeMillis() > mob.getLastAttackTime()) if (System.currentTimeMillis() > mob.getLastAttackTime())
AttackTarget(mob, mob.getCombatTarget()); AttackTarget(mob, mob.getCombatTarget());
} catch(Exception e){
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: CheckForAttack" + " " + e.getMessage());
}
} }
private static void CheckToSendMobHome(Mob mob) { private static void CheckToSendMobHome(Mob mob) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.CHECKTOSENDMOBHOME; try{
if (mob.BehaviourType.isAgressive) { if (mob.BehaviourType.isAgressive) {
if (mob.isPlayerGuard()) { if (mob.isPlayerGuard()) {
if (mob.BehaviourType.ordinal() == Enum.MobBehaviourType.GuardCaptain.ordinal()) { if (mob.BehaviourType.ordinal() == Enum.MobBehaviourType.GuardCaptain.ordinal()) {
@ -637,10 +679,13 @@ public class MobileFSM {
PlayerCharacter.getFromCache((int) playerEntry.getKey()).setHateValue(0); PlayerCharacter.getFromCache((int) playerEntry.getKey()).setHateValue(0);
} }
} }
} catch(Exception e){
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: CheckToSendMobHome" + " " + e.getMessage());
}
} }
private static void chaseTarget(Mob mob) { private static void chaseTarget(Mob mob) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.CHASETARGET; try{
mob.updateMovementState(); mob.updateMovementState();
mob.updateLocation(); mob.updateLocation();
if (CombatUtilities.inRange2D(mob, mob.getCombatTarget(), mob.getRange()) == false) { if (CombatUtilities.inRange2D(mob, mob.getCombatTarget(), mob.getRange()) == false) {
@ -663,10 +708,13 @@ public class MobileFSM {
} }
} }
} catch(Exception e){
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: chaseTarget" + " " + e.getMessage());
}
} }
private static void SafeGuardAggro(Mob mob) { private static void SafeGuardAggro(Mob mob) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.SAFEGUARDAGRO; try{
HashSet<AbstractWorldObject> awoList = WorldGrid.getObjectsInRangePartial(mob, 100, MBServerStatics.MASK_MOB); HashSet<AbstractWorldObject> awoList = WorldGrid.getObjectsInRangePartial(mob, 100, MBServerStatics.MASK_MOB);
for (AbstractWorldObject awoMob : awoList) { for (AbstractWorldObject awoMob : awoList) {
//dont scan self. //dont scan self.
@ -680,18 +728,24 @@ public class MobileFSM {
continue; continue;
mob.setCombatTarget(aggroMob); mob.setCombatTarget(aggroMob);
} }
} catch(Exception e){
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: SafeGuardAggro" + " " + e.getMessage());
}
} }
public static void GuardCaptainLogic(Mob mob) { public static void GuardCaptainLogic(Mob mob) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.GUARDCAPTAINLOGIC; try{
if (mob.getCombatTarget() == null) if (mob.getCombatTarget() == null)
CheckForPlayerGuardAggro(mob); CheckForPlayerGuardAggro(mob);
CheckMobMovement(mob); CheckMobMovement(mob);
CheckForAttack(mob); CheckForAttack(mob);
} catch(Exception e){
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: GuardCaptainLogic" + " " + e.getMessage());
}
} }
public static void GuardMinionLogic(Mob mob) { public static void GuardMinionLogic(Mob mob) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.GUARDMINIONLOGIC; try{
if (!mob.npcOwner.isAlive() && mob.getCombatTarget() == null) { if (!mob.npcOwner.isAlive() && mob.getCombatTarget() == null) {
CheckForPlayerGuardAggro(mob); CheckForPlayerGuardAggro(mob);
} }
@ -701,18 +755,24 @@ public class MobileFSM {
mob.setCombatTarget(null); mob.setCombatTarget(null);
CheckMobMovement(mob); CheckMobMovement(mob);
CheckForAttack(mob); CheckForAttack(mob);
} catch(Exception e){
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: GuardMinionLogic" + " " + e.getMessage());
}
} }
public static void GuardWallArcherLogic(Mob mob) { public static void GuardWallArcherLogic(Mob mob) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.GUARDWALLARCHERLOGIC; try{
if (mob.getCombatTarget() == null) if (mob.getCombatTarget() == null)
CheckForPlayerGuardAggro(mob); CheckForPlayerGuardAggro(mob);
else else
CheckForAttack(mob); CheckForAttack(mob);
} catch(Exception e){
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: GuardWallArcherLogic" + " " + e.getMessage());
}
} }
private static void PetLogic(Mob mob) { private static void PetLogic(Mob mob) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.PETLOGIC; try{
if(mob.getOwner() == null && mob.isNecroPet() == false && mob.isSiege() == false){ if(mob.getOwner() == null && mob.isNecroPet() == false && mob.isSiege() == false){
if(ZoneManager.getSeaFloor().zoneMobSet.contains(mob)){ if(ZoneManager.getSeaFloor().zoneMobSet.contains(mob)){
mob.killCharacter("no owner"); mob.killCharacter("no owner");
@ -734,11 +794,13 @@ public class MobileFSM {
mob.setHealth(mob.getHealthMax()); mob.setHealth(mob.getHealthMax());
} }
} }
}} catch(Exception e){
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: PetLogic" + " " + e.getMessage());
} }
} }
private static void HamletGuardLogic(Mob mob) { private static void HamletGuardLogic(Mob mob) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.HAMLETGUARDLOGIC; try{
if (mob.getCombatTarget() == null) { if (mob.getCombatTarget() == null) {
//safehold guard //safehold guard
SafeGuardAggro(mob); SafeGuardAggro(mob);
@ -748,10 +810,13 @@ public class MobileFSM {
} }
} }
CheckForAttack(mob); CheckForAttack(mob);
} catch(Exception e){
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: HamletGuardLogic" + " " + e.getMessage());
}
} }
private static void DefaultLogic(Mob mob) { private static void DefaultLogic(Mob mob) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.DEFAULTLOGIC; try{
//check for players that can be aggroed if mob is agressive and has no target //check for players that can be aggroed if mob is agressive and has no target
if(mob.getCombatTarget() != null && mob.playerAgroMap.containsKey(mob.getCombatTarget().getObjectUUID()) == false){ if(mob.getCombatTarget() != null && mob.playerAgroMap.containsKey(mob.getCombatTarget().getObjectUUID()) == false){
mob.setCombatTarget(null); mob.setCombatTarget(null);
@ -777,10 +842,13 @@ public class MobileFSM {
//check if mob can attack if it isn't wimpy //check if mob can attack if it isn't wimpy
if (!mob.BehaviourType.isWimpy && mob.combatTarget != null) if (!mob.BehaviourType.isWimpy && mob.combatTarget != null)
CheckForAttack(mob); CheckForAttack(mob);
} catch(Exception e){
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: DefaultLogic" + " " + e.getMessage());
}
} }
public static void CheckForPlayerGuardAggro(Mob mob) { public static void CheckForPlayerGuardAggro(Mob mob) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.CHECKFORPLAYERGUARDAGRO; try{
//looks for and sets mobs combatTarget //looks for and sets mobs combatTarget
if (!mob.isAlive()) if (!mob.isAlive())
return; return;
@ -809,10 +877,13 @@ public class MobileFSM {
return; return;
} }
} }
} catch(Exception e){
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: CheckForPlayerGuardAggro" + e.getMessage());
}
} }
public static Boolean GuardCanAggro(Mob mob, PlayerCharacter target) { public static Boolean GuardCanAggro(Mob mob, PlayerCharacter target) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.GUARDCANAGRO; try{
if (mob.getGuild().getNation().equals(target.getGuild().getNation())) if (mob.getGuild().getNation().equals(target.getGuild().getNation()))
return false; return false;
if (mob.BehaviourType.ordinal() == Enum.MobBehaviourType.GuardMinion.ordinal()) { if (mob.BehaviourType.ordinal() == Enum.MobBehaviourType.GuardMinion.ordinal()) {
@ -850,11 +921,14 @@ public class MobileFSM {
return true; return true;
} }
} }
} catch(Exception e){
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: GuardCanAggro" + " " + e.getMessage());
}
return false; return false;
} }
public static void randomGuardPatrolPoint(Mob mob) { public static void randomGuardPatrolPoint(Mob mob) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.RANDOMGUARDPATROLPOINTS; try{
if (mob.isMoving() == true) { if (mob.isMoving() == true) {
//early exit for a mob who is already moving to a patrol point //early exit for a mob who is already moving to a patrol point
//while mob moving, update lastPatrolTime so that when they stop moving the 10 second timer can begin //while mob moving, update lastPatrolTime so that when they stop moving the 10 second timer can begin
@ -890,10 +964,13 @@ public class MobileFSM {
} }
} }
} }
} catch(Exception e){
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: randomGuardPatrolPoints" + " " + e.getMessage());
}
} }
public static AbstractWorldObject ChangeTargetFromHateValue(Mob mob) { public static AbstractWorldObject ChangeTargetFromHateValue(Mob mob) {
MobileFSMManager.getInstance().currentState = MobileFSMManager.fsmState.CHANGETARGETFROMHATEVALUE; try{
float CurrentHateValue = 0; float CurrentHateValue = 0;
if (mob.getCombatTarget() != null && mob.getCombatTarget().getObjectType().equals(Enum.GameObjectType.PlayerCharacter)) { if (mob.getCombatTarget() != null && mob.getCombatTarget().getObjectType().equals(Enum.GameObjectType.PlayerCharacter)) {
CurrentHateValue = ((PlayerCharacter) mob.getCombatTarget()).getHateValue(); CurrentHateValue = ((PlayerCharacter) mob.getCombatTarget()).getHateValue();
@ -910,5 +987,9 @@ public class MobileFSM {
} }
} }
return mostHatedTarget; return mostHatedTarget;
} catch(Exception e){
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: ChangeTargetFromMostHated" + " " + e.getMessage());
}
return null;
} }
} }

35
src/engine/ai/MobileFSMManager.java

@ -34,39 +34,6 @@ public class MobileFSMManager {
public static int AI_POWER_DIVISOR = 20; public static int AI_POWER_DIVISOR = 20;
private volatile boolean alive; private volatile boolean alive;
private long timeOfKill = -1; private long timeOfKill = -1;
public fsmState currentState;
public Mob currentMob;
public enum fsmState {
ATTACKTARGET,
ATTACKPLAYER,
ATTACKBUILDING,
ATTACKMOB,
PATROL,
CANCAST,
MOBCAST,
MOBCALLFORHELP,
DETERMINEACTION,
CHECKFORAGRO,
CHECKMOBMOVEMENT,
CHECKFORRESPAWN,
CHECKFORATTACK,
CHECKTOSENDMOBHOME,
CHASETARGET,
SAFEGUARDAGRO,
GUARDCAPTAINLOGIC,
GUARDMINIONLOGIC,
GUARDWALLARCHERLOGIC,
PETLOGIC,
HAMLETGUARDLOGIC,
DEFAULTLOGIC,
CHECKFORPLAYERGUARDAGRO,
GUARDCANAGRO,
RANDOMGUARDPATROLPOINTS,
CHANGETARGETFROMHATEVALUE
}
public String getFSMState(){
return "Executing: " + this.currentState + " on Mobile UUID: " + this.currentMob.getObjectUUID() + " " + this.currentMob.getName();
}
private MobileFSMManager() { private MobileFSMManager() {
Runnable worker = new Runnable() { Runnable worker = new Runnable() {
@ -150,7 +117,7 @@ public class MobileFSMManager {
executionMax = executionTime; executionMax = executionTime;
mobPulse = System.currentTimeMillis() + AI_PULSE_MOB_THRESHOLD; mobPulse = System.currentTimeMillis() + AI_PULSE_MOB_THRESHOLD;
Logger.error("MobileFSM cycle completed: " + DateTime.now()); Logger.info("MobileFSM cycle completed: " + DateTime.now());
} }
} }
} }

44
src/engine/devcmd/cmds/AuditAI.java

@ -1,44 +0,0 @@
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.devcmd.cmds;
import engine.ai.MobileFSMManager;
import engine.devcmd.AbstractDevCmd;
import engine.objects.AbstractGameObject;
import engine.objects.PlayerCharacter;
/**
* ./auditai <- display the current state of mob AI thread
*/
public class AuditAI extends AbstractDevCmd {
public AuditAI() {
super("auditai");
}
@Override
protected void _doCmd(PlayerCharacter playerCharacter, String[] words, AbstractGameObject target) {
throwbackInfo(playerCharacter, MobileFSMManager.getInstance().getFSMState());
}
@Override
protected String _getHelpString() {
return "displays the current state and mob running thought he AI system";
}
@Override
protected String _getUsageString() {
return "'./auditai";
}
}

1
src/engine/gameManager/DevCmdManager.java

@ -58,7 +58,6 @@ public enum DevCmdManager {
DevCmdManager.registerDevCmd(new InfoCmd()); DevCmdManager.registerDevCmd(new InfoCmd());
DevCmdManager.registerDevCmd(new aiInfoCmd()); DevCmdManager.registerDevCmd(new aiInfoCmd());
DevCmdManager.registerDevCmd(new simulateBootyCmd()); DevCmdManager.registerDevCmd(new simulateBootyCmd());
DevCmdManager.registerDevCmd(new AuditAI());
DevCmdManager.registerDevCmd(new GetHeightCmd()); DevCmdManager.registerDevCmd(new GetHeightCmd());
// Tester // Tester

Loading…
Cancel
Save