forked from MagicBane/Server
pet AI implemented
This commit is contained in:
@@ -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 {
|
||||
}
|
||||
}
|
||||
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 {
|
||||
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 {
|
||||
}
|
||||
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);
|
||||
@@ -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
|
||||
|
||||
@@ -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,6 +87,9 @@ 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;
|
||||
|
||||
@@ -2022,7 +2022,6 @@ public class ClientMessagePump implements NetMsgHandler {
|
||||
return;
|
||||
|
||||
CombatManager.setAttackTarget(msg, conn);
|
||||
|
||||
if (pet.getCombatTarget() == null)
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
}
|
||||
|
||||
// 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();
|
||||
|
||||
Reference in New Issue
Block a user