Browse Source

pet AI implemented

master
FatBoy-DOTC 2 years ago
parent
commit
cfa59d8012
  1. 38
      src/engine/ai/MobileFSM.java
  2. 6
      src/engine/devcmd/cmds/aiInfoCmd.java
  3. 1
      src/engine/net/client/ClientMessagePump.java
  4. 6
      src/engine/objects/Mob.java

38
src/engine/ai/MobileFSM.java

@ -56,7 +56,7 @@ public class MobileFSM { @@ -56,7 +56,7 @@ public class MobileFSM {
SpellAggroGrouperWimpy(Spell, true, false, true, false, false),
//Independent Types
SimpleStandingGuard(null, false, false, false, false, false),
Pet1(null, false, false, false, false, false),
Pet1(null, false, false, true, false, false),
Simple(null, false, false, true, false, false),
Helpee(null, false, true, true, false, true),
HelpeeWimpy(null, true, false, true, false, false),
@ -566,7 +566,11 @@ public class MobileFSM { @@ -566,7 +566,11 @@ public class MobileFSM {
}
}
public static void run(Mob mob) {
if (mob == null || mob.BehaviourType == MobBehaviourType.None) {
if (mob == null) {
return;
}
if (mob.isPet() == false && mob.isSummonedPet() == false && mob.isNecroPet() == false) {
if (mob.BehaviourType != null && mob.BehaviourType == MobBehaviourType.None) {
return;
}
if (mob.isAlive() == false) {
@ -593,7 +597,12 @@ public class MobileFSM { @@ -593,7 +597,12 @@ public class MobileFSM {
if (!mob.BehaviourType.isWimpy && !mob.isMoving() && mob.combatTarget != null) {
CheckForAttack(mob);
}
} else {
CheckMobMovement(mob);
CheckForAttack(mob);
}
}
private static void CheckForAggro(Mob aiAgent) {
//looks for and sets mobs combatTarget
if (!aiAgent.isAlive()) {
@ -629,6 +638,7 @@ public class MobileFSM { @@ -629,6 +638,7 @@ public class MobileFSM {
}
private static void CheckMobMovement(Mob mob) {
mob.updateLocation();
if (mob.isPet() == false && mob.isSummonedPet() == false && mob.isNecroPet() == false) {
if (mob.getCombatTarget() == null) {
//patrol
int patrolRandom = ThreadLocalRandom.current().nextInt(1000);
@ -649,7 +659,7 @@ public class MobileFSM { @@ -649,7 +659,7 @@ public class MobileFSM {
MovementUtilities.aiMove(mob, Vector3fImmutable.getRandomPointInCircle(mob.getBindLoc(), patrolRadius), true);
}
}
}else {
} else {
//chase target
mob.updateMovementState();
if (CombatUtilities.inRange2D(mob, mob.getCombatTarget(), mob.getRange()) == false) {
@ -662,6 +672,28 @@ public class MobileFSM { @@ -662,6 +672,28 @@ public class MobileFSM {
}
}
}
} else{
//pet logic
if (mob.getCombatTarget() == null || mob.combatTarget.isAlive() == false) {
//move back to owner
if (CombatUtilities.inRange2D(mob, mob.getOwner(), 5) == false) {
mob.destination = mob.getOwner().getLoc();
MovementUtilities.moveToLocation(mob, mob.destination, 5);
}
} else {
//chase target
mob.updateMovementState();
if (CombatUtilities.inRange2D(mob, mob.getCombatTarget(), mob.getRange()) == false) {
if (mob.getRange() > 15) {
mob.destination = mob.getCombatTarget().getLoc();
MovementUtilities.moveToLocation(mob, mob.destination, 0);
} else {
mob.destination = MovementUtilities.GetDestinationToCharacter(mob, (AbstractCharacter) mob.getCombatTarget());
MovementUtilities.moveToLocation(mob, mob.destination, mob.getRange());
}
}
}
}
}
private static void CheckForRespawn(Mob aiAgent) {
//handles checking for respawn of dead mobs even when no players have mob loaded

6
src/engine/devcmd/cmds/aiInfoCmd.java

@ -79,6 +79,7 @@ public class aiInfoCmd extends AbstractDevCmd { @@ -79,6 +79,7 @@ public class aiInfoCmd extends AbstractDevCmd {
Mob mob = (Mob) target;
output = "Mob AI Information:" + newline;
output += mob.getName() + newline;
if(mob.BehaviourType != null) {
output += "BehaviourType: " + mob.BehaviourType.toString() + newline;
output += "Behaviour Helper Type: " + mob.BehaviourType.BehaviourHelperType.toString() + newline;
output += "Wimpy: " + mob.BehaviourType.isWimpy + newline;
@ -86,12 +87,15 @@ public class aiInfoCmd extends AbstractDevCmd { @@ -86,12 +87,15 @@ public class aiInfoCmd extends AbstractDevCmd {
output += "Can Roam: " + mob.BehaviourType.canRoam + newline;
output += "Calls For Help: " + mob.BehaviourType.callsForHelp + newline;
output += "Responds To Call For Help: " + mob.BehaviourType.respondsToCallForHelp + newline;
} else{
output += "BehaviourType: NULL" + newline;
}
output += "Player Aggro Map Size: " + mob.playerAgroMap.size() + newline;
if(mob.playerAgroMap.size() > 0){
output += "Players Loaded:" + newline;
}
for(Map.Entry<Integer,Boolean> entry : mob.playerAgroMap.entrySet()){
output += "Player ID: " + entry.getKey() + "In Range To Aggro: " + entry.getValue() + newline;
output += "Player ID: " + entry.getKey() + " In Range To Aggro: " + entry.getValue() + newline;
}
}
throwbackInfo(pc, output);

1
src/engine/net/client/ClientMessagePump.java

@ -2022,7 +2022,6 @@ public class ClientMessagePump implements NetMsgHandler { @@ -2022,7 +2022,6 @@ public class ClientMessagePump implements NetMsgHandler {
return;
CombatManager.setAttackTarget(msg, conn);
if (pet.getCombatTarget() == null)
return;
}

6
src/engine/objects/Mob.java

@ -181,6 +181,7 @@ public class Mob extends AbstractIntelligenceAgent { @@ -181,6 +181,7 @@ public class Mob extends AbstractIntelligenceAgent {
this.parentZone = parent;
this.parentZoneID = (parent != null) ? parent.getObjectUUID() : 0;
this.ownerUID = owner.getObjectUUID();
this.BehaviourType = MobileFSM.MobBehaviourType.Pet1;
initializeMob(true, false, false);
clearStatic();
}
@ -1955,10 +1956,13 @@ public class Mob extends AbstractIntelligenceAgent { @@ -1955,10 +1956,13 @@ public class Mob extends AbstractIntelligenceAgent {
}
// Combine mobbase and mob aggro arrays into one bitvector
try {
this.notEnemy.addAll(this.getMobBase().notEnemy);
this.enemy.addAll(this.getMobBase().enemy);
}
catch(Exception ex){
}
try {
NPCManager.applyRuneSetEffects(this);
recalculateStats();

Loading…
Cancel
Save