Relevant methods made static and moved into NPCManager
This commit is contained in:
+117
-118
@@ -34,7 +34,6 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
import static engine.math.FastMath.sqr;
|
||||
import static java.lang.Math.sqrt;
|
||||
|
||||
public class MobileFSM {
|
||||
|
||||
@@ -58,7 +57,7 @@ public class MobileFSM {
|
||||
if (mob == null) {
|
||||
return;
|
||||
}
|
||||
STATE state = mob.getState();
|
||||
STATE state = mob.state;
|
||||
switch (state) {
|
||||
case Idle:
|
||||
if (mob.isAlive())
|
||||
@@ -149,21 +148,21 @@ public class MobileFSM {
|
||||
|
||||
public static boolean setAwake(Mob aiAgent, boolean force) {
|
||||
if (force) {
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return true;
|
||||
}
|
||||
if (aiAgent.getState() == STATE.Idle) {
|
||||
aiAgent.setState(STATE.Awake);
|
||||
if (aiAgent.state == STATE.Idle) {
|
||||
aiAgent.state = STATE.Awake;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean setAggro(Mob aiAgent, int targetID) {
|
||||
if (aiAgent.getState() != STATE.Dead) {
|
||||
if (aiAgent.state != STATE.Dead) {
|
||||
aiAgent.setNoAggro(false);
|
||||
aiAgent.setAggroTargetID(targetID);
|
||||
aiAgent.setState(STATE.Aggro);
|
||||
aiAgent.state = STATE.Aggro;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -173,18 +172,18 @@ public class MobileFSM {
|
||||
if (mob.getLoc().distanceSquared2D(mob.getBindLoc()) > sqr(2000)) {
|
||||
|
||||
mob.setWalkingHome(false);
|
||||
mob.setState(STATE.Home);
|
||||
mob.state = STATE.Home;
|
||||
}
|
||||
}
|
||||
private static void awake(Mob aiAgent) {
|
||||
if (!aiAgent.isAlive()) {
|
||||
aiAgent.setState(STATE.Dead);
|
||||
aiAgent.state = STATE.Dead;
|
||||
return;
|
||||
}
|
||||
|
||||
if (aiAgent.getLoc().distanceSquared2D(aiAgent.getBindLoc()) > sqr(2000)) {
|
||||
aiAgent.setWalkingHome(false);
|
||||
aiAgent.setState(STATE.Home);
|
||||
aiAgent.state = STATE.Home;
|
||||
return;
|
||||
}
|
||||
//Don't attempt to aggro if No aggro is on and aiAgent is not home yet.
|
||||
@@ -197,8 +196,8 @@ public class MobileFSM {
|
||||
aiAgent.setNoAggro(false);
|
||||
}
|
||||
//no players currently have this mob loaded. return to IDLE.
|
||||
if (aiAgent.getPlayerAgroMap().isEmpty()) {
|
||||
aiAgent.setState(STATE.Idle);
|
||||
if (aiAgent.playerAgroMap.isEmpty()) {
|
||||
aiAgent.state = STATE.Idle;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -210,7 +209,7 @@ public class MobileFSM {
|
||||
|
||||
//Get the Map for Players that loaded this mob.
|
||||
|
||||
ConcurrentHashMap<Integer, Boolean> loadedPlayers = aiAgent.getPlayerAgroMap();
|
||||
ConcurrentHashMap<Integer, Boolean> loadedPlayers = aiAgent.playerAgroMap;
|
||||
|
||||
|
||||
if (!Enum.MobFlagType.AGGRESSIVE.elementOf(aiAgent.getMobBase().getFlags()) && aiAgent.getCombatTarget() == null) {
|
||||
@@ -218,7 +217,7 @@ public class MobileFSM {
|
||||
|
||||
int patrolRandom = ThreadLocalRandom.current().nextInt(1000);
|
||||
if (patrolRandom <= MBServerStatics.AI_PATROL_DIVISOR) {
|
||||
aiAgent.setState(STATE.Patrol);
|
||||
aiAgent.state = STATE.Patrol;
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -251,7 +250,7 @@ public class MobileFSM {
|
||||
|
||||
if (MovementUtilities.inRangeToAggro(aiAgent, loadedPlayer)) {
|
||||
aiAgent.setAggroTargetID(playerID);
|
||||
aiAgent.setState(STATE.Aggro);
|
||||
aiAgent.state = STATE.Aggro;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -260,37 +259,37 @@ public class MobileFSM {
|
||||
|
||||
int patrolRandom = ThreadLocalRandom.current().nextInt(1000);
|
||||
if (patrolRandom <= MBServerStatics.AI_PATROL_DIVISOR) {
|
||||
aiAgent.setState(STATE.Patrol);
|
||||
aiAgent.state = STATE.Patrol;
|
||||
}
|
||||
|
||||
}
|
||||
private static void guardAttackMob(Mob aiAgent) {
|
||||
if (!aiAgent.isAlive()) {
|
||||
aiAgent.setState(STATE.Dead);
|
||||
aiAgent.state = STATE.Dead;
|
||||
return;
|
||||
}
|
||||
|
||||
AbstractGameObject target = aiAgent.getCombatTarget();
|
||||
if (target == null) {
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
if (target.getObjectType().equals(GameObjectType.Mob) == false) {
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
if (target.equals(aiAgent)) {
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
Mob mob = (Mob) target;
|
||||
|
||||
if (!mob.isAlive() || mob.getState() == STATE.Dead) {
|
||||
if (!mob.isAlive() || mob.state == STATE.Dead) {
|
||||
aiAgent.setCombatTarget(null);
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -350,7 +349,7 @@ public class MobileFSM {
|
||||
}
|
||||
private static void awakeNPCguard(Mob aiAgent) {
|
||||
if (!aiAgent.isAlive()) {
|
||||
aiAgent.setState(STATE.Dead);
|
||||
aiAgent.state = STATE.Dead;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -359,7 +358,7 @@ public class MobileFSM {
|
||||
|
||||
if (aiAgent.getLoc().distanceSquared2D(aiAgent.getBindLoc()) > sqr(2000)) {
|
||||
aiAgent.setWalkingHome(false);
|
||||
aiAgent.setState(STATE.Home);
|
||||
aiAgent.state = STATE.Home;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -383,13 +382,13 @@ public class MobileFSM {
|
||||
if (aiAgent.getLoc().distanceSquared2D(mob.getLoc()) > sqr(50))
|
||||
continue;
|
||||
aiAgent.setCombatTarget(mob);
|
||||
aiAgent.setState(STATE.Attack);
|
||||
aiAgent.state = STATE.Attack;
|
||||
}
|
||||
}
|
||||
private static void petAwake(Mob aiAgent) {
|
||||
|
||||
if (!aiAgent.isAlive()) {
|
||||
aiAgent.setState(STATE.Dead);
|
||||
aiAgent.state = STATE.Dead;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -425,13 +424,13 @@ public class MobileFSM {
|
||||
private static void aggro(Mob aiAgent, int targetID) {
|
||||
|
||||
if (!aiAgent.isAlive()) {
|
||||
aiAgent.setState(STATE.Dead);
|
||||
aiAgent.state = STATE.Dead;
|
||||
return;
|
||||
}
|
||||
|
||||
if (aiAgent.getLoc().distanceSquared2D(aiAgent.getBindLoc()) > sqr(2000)) {
|
||||
aiAgent.setWalkingHome(false);
|
||||
aiAgent.setState(STATE.Home);
|
||||
aiAgent.state = STATE.Home;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -447,22 +446,22 @@ public class MobileFSM {
|
||||
|
||||
if (aggroTarget == null) {
|
||||
// Logger.error("MobileFSM.aggro", "aggro target with UUID " + targetID + " returned null");
|
||||
aiAgent.getPlayerAgroMap().remove(targetID);
|
||||
aiAgent.playerAgroMap.remove(targetID);
|
||||
aiAgent.setAggroTargetID(0);
|
||||
aiAgent.setState(STATE.Patrol);
|
||||
aiAgent.state = STATE.Patrol;
|
||||
return;
|
||||
}
|
||||
if (!aiAgent.canSee(aggroTarget)) {
|
||||
aiAgent.setCombatTarget(null);
|
||||
targetID = 0;
|
||||
aiAgent.setState(STATE.Patrol);
|
||||
aiAgent.state = STATE.Patrol;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!aggroTarget.isActive()) {
|
||||
aiAgent.setCombatTarget(null);
|
||||
targetID = 0;
|
||||
aiAgent.setState(STATE.Patrol);
|
||||
aiAgent.state = STATE.Patrol;
|
||||
return;
|
||||
}
|
||||
aiAgent.setCombatTarget(aggroTarget);
|
||||
@@ -471,7 +470,7 @@ public class MobileFSM {
|
||||
attack(aiAgent, targetID);
|
||||
}
|
||||
} else if (CombatUtilities.inRange2D(aiAgent, aggroTarget, aiAgent.getRange())) {
|
||||
aiAgent.setState(STATE.Attack);
|
||||
aiAgent.state = STATE.Attack;
|
||||
attack(aiAgent, targetID);
|
||||
return;
|
||||
}
|
||||
@@ -480,14 +479,14 @@ public class MobileFSM {
|
||||
aiAgent.setAggroTargetID(0);
|
||||
aiAgent.setCombatTarget(null);
|
||||
MovementUtilities.moveToLocation(aiAgent, aiAgent.getTrueBindLoc(), 0);
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!MovementUtilities.inRangeOfBindLocation(aiAgent)) {
|
||||
aiAgent.setCombatTarget(null);
|
||||
aiAgent.setAggroTargetID(0);
|
||||
aiAgent.setState(STATE.Home);
|
||||
aiAgent.state = STATE.Home;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -511,14 +510,14 @@ public class MobileFSM {
|
||||
private static void petAttack(Mob aiAgent) {
|
||||
|
||||
if (!aiAgent.isAlive()) {
|
||||
aiAgent.setState(STATE.Dead);
|
||||
aiAgent.state = STATE.Dead;
|
||||
return;
|
||||
}
|
||||
|
||||
AbstractGameObject target = aiAgent.getCombatTarget();
|
||||
|
||||
if (target == null) {
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -530,13 +529,13 @@ public class MobileFSM {
|
||||
|
||||
if (!player.isActive()) {
|
||||
aiAgent.setCombatTarget(null);
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.inSafeZone()) {
|
||||
aiAgent.setCombatTarget(null);
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -556,21 +555,21 @@ public class MobileFSM {
|
||||
private static void mobAttack(Mob aiAgent) {
|
||||
|
||||
if (!aiAgent.isAlive()) {
|
||||
aiAgent.setState(STATE.Dead);
|
||||
aiAgent.state = STATE.Dead;
|
||||
return;
|
||||
}
|
||||
|
||||
if (aiAgent.getLoc().distanceSquared2D(aiAgent.getBindLoc()) > sqr(2000)) {
|
||||
|
||||
aiAgent.setWalkingHome(false);
|
||||
aiAgent.setState(STATE.Home);
|
||||
aiAgent.state = STATE.Home;
|
||||
return;
|
||||
}
|
||||
|
||||
AbstractGameObject target = aiAgent.getCombatTarget();
|
||||
|
||||
if (target == null) {
|
||||
aiAgent.setState(STATE.Patrol);
|
||||
aiAgent.state = STATE.Patrol;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -582,13 +581,13 @@ public class MobileFSM {
|
||||
|
||||
if (!player.isActive()) {
|
||||
aiAgent.setCombatTarget(null);
|
||||
aiAgent.setState(STATE.Patrol);
|
||||
aiAgent.state = STATE.Patrol;
|
||||
return;
|
||||
}
|
||||
|
||||
if (aiAgent.isNecroPet() && player.inSafeZone()) {
|
||||
aiAgent.setCombatTarget(null);
|
||||
aiAgent.setState(STATE.Idle);
|
||||
aiAgent.state = STATE.Idle;
|
||||
return;
|
||||
}
|
||||
if (canCast(aiAgent) == true) {
|
||||
@@ -614,19 +613,19 @@ public class MobileFSM {
|
||||
|
||||
if (building.getRank() == -1) {
|
||||
aiAgent.setCombatTarget(null);
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!building.isVulnerable()) {
|
||||
aiAgent.setCombatTarget(null);
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
if (BuildingManager.getBuildingFromCache(building.getObjectUUID()) == null) {
|
||||
aiAgent.setCombatTarget(null);
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -645,7 +644,7 @@ public class MobileFSM {
|
||||
continue;
|
||||
|
||||
mob.setCombatTarget(aiAgent);
|
||||
mob.setState(STATE.Attack);
|
||||
mob.state = STATE.Attack;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -722,13 +721,13 @@ public class MobileFSM {
|
||||
|
||||
if (aiAgent.getMobBase().getSeeInvis() < player.getHidden()) {
|
||||
aiAgent.setCombatTarget(null);
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!player.isAlive()) {
|
||||
aiAgent.setCombatTarget(null);
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -798,13 +797,13 @@ public class MobileFSM {
|
||||
|
||||
if (aiAgent.getMobBase().getSeeInvis() < player.getHidden()) {
|
||||
aiAgent.setCombatTarget(null);
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!player.isAlive()) {
|
||||
aiAgent.setCombatTarget(null);
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -815,14 +814,14 @@ public class MobileFSM {
|
||||
aiAgent.setCombatTarget(null);
|
||||
aiAgent.setAggroTargetID(0);
|
||||
aiAgent.setWalkingHome(false);
|
||||
aiAgent.setState(STATE.Home);
|
||||
aiAgent.state = STATE.Home;
|
||||
return;
|
||||
}
|
||||
if (!MovementUtilities.inRangeDropAggro(aiAgent, player)) {
|
||||
aiAgent.setAggroTargetID(0);
|
||||
aiAgent.setCombatTarget(null);
|
||||
MovementUtilities.moveToLocation(aiAgent, aiAgent.getTrueBindLoc(), 0);
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
if (CombatUtilities.inRange2D(aiAgent, player, aiAgent.getRange())) {
|
||||
@@ -891,13 +890,13 @@ public class MobileFSM {
|
||||
if (CombatUtilities.inRangeToAttack2D(aiAgent, player))
|
||||
return;
|
||||
//set mob to pursue target
|
||||
aiAgent.setState(MobileFSM.STATE.Chase);
|
||||
aiAgent.state = STATE.Chase;
|
||||
}
|
||||
private static void handleMobAttackForPet(Mob aiAgent, Mob mob) {
|
||||
|
||||
if (!mob.isAlive()) {
|
||||
aiAgent.setCombatTarget(null);
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -969,7 +968,7 @@ public class MobileFSM {
|
||||
|
||||
if (!mob.isAlive()) {
|
||||
aiAgent.setCombatTarget(null);
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1040,7 +1039,7 @@ public class MobileFSM {
|
||||
|
||||
//in range to attack, start attacking now!
|
||||
if (!aiAgent.isAlive()) {
|
||||
aiAgent.setState(STATE.Dead);
|
||||
aiAgent.state = STATE.Dead;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1048,23 +1047,23 @@ public class MobileFSM {
|
||||
|
||||
if (aggroTarget == null) {
|
||||
// Logger.error("MobileFSM.aggro", "aggro target with UUID " + targetID + " returned null");
|
||||
aiAgent.getPlayerAgroMap().remove(targetID);
|
||||
aiAgent.playerAgroMap.remove(targetID);
|
||||
aiAgent.setAggroTargetID(0);
|
||||
aiAgent.setState(STATE.Patrol);
|
||||
aiAgent.state = STATE.Patrol;
|
||||
return;
|
||||
}
|
||||
|
||||
if (aiAgent.getMobBase().getSeeInvis() < aggroTarget.getHidden()) {
|
||||
aiAgent.setAggroTargetID(0);
|
||||
aiAgent.setCombatTarget(null);
|
||||
aiAgent.setState(STATE.Patrol);
|
||||
aiAgent.state = STATE.Patrol;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!aggroTarget.isAlive()) {
|
||||
aiAgent.setAggroTargetID(0);
|
||||
aiAgent.setCombatTarget(null);
|
||||
aiAgent.setState(STATE.Patrol);
|
||||
aiAgent.state = STATE.Patrol;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1072,7 +1071,7 @@ public class MobileFSM {
|
||||
aiAgent.setCombatTarget(null);
|
||||
aiAgent.setAggroTargetID(0);
|
||||
aiAgent.setWalkingHome(false);
|
||||
aiAgent.setState(STATE.Home);
|
||||
aiAgent.state = STATE.Home;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1080,7 +1079,7 @@ public class MobileFSM {
|
||||
aiAgent.setAggroTargetID(0);
|
||||
aiAgent.setCombatTarget(null);
|
||||
MovementUtilities.moveToLocation(aiAgent, aiAgent.getTrueBindLoc(), 0);
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1144,17 +1143,17 @@ public class MobileFSM {
|
||||
MovementManager.translocate(aiAgent, aiAgent.getBindLoc(), null);
|
||||
aiAgent.setAggroTargetID(0);
|
||||
aiAgent.setCombatTarget(null);
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
}
|
||||
private static void recalling(Mob aiAgent) {
|
||||
//recall home.
|
||||
if (aiAgent.getLoc() == aiAgent.getBindLoc())
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
|
||||
if (aiAgent.getLoc().distanceSquared2D(aiAgent.getBindLoc()) > sqr(2000)) {
|
||||
|
||||
aiAgent.setWalkingHome(false);
|
||||
aiAgent.setState(STATE.Home);
|
||||
aiAgent.state = STATE.Home;
|
||||
}
|
||||
}
|
||||
private static void patrol(Mob aiAgent) {
|
||||
@@ -1162,7 +1161,7 @@ public class MobileFSM {
|
||||
MobBase mobbase = aiAgent.getMobBase();
|
||||
|
||||
if (mobbase != null && (Enum.MobFlagType.SENTINEL.elementOf(mobbase.getFlags()) || !Enum.MobFlagType.CANROAM.elementOf(mobbase.getFlags()))) {
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1178,35 +1177,35 @@ public class MobileFSM {
|
||||
|
||||
MovementUtilities.aiMove(aiAgent, Vector3fImmutable.getRandomPointInCircle(aiAgent.getBindLoc(), patrolRadius), true);
|
||||
}
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
}
|
||||
private static void dead(Mob aiAgent) {
|
||||
//Despawn Timer with Loot currently in inventory.
|
||||
if (aiAgent.getCharItemManager().getInventoryCount() > 0) {
|
||||
if (System.currentTimeMillis() > aiAgent.getDeathTime() + MBServerStatics.DESPAWN_TIMER_WITH_LOOT) {
|
||||
if (System.currentTimeMillis() > aiAgent.deathTime + MBServerStatics.DESPAWN_TIMER_WITH_LOOT) {
|
||||
aiAgent.despawn();
|
||||
//update time of death after mob despawns so respawn time happens after mob despawns.
|
||||
aiAgent.setDeathTime(System.currentTimeMillis());
|
||||
aiAgent.setState(STATE.Respawn);
|
||||
aiAgent.state = STATE.Respawn;
|
||||
}
|
||||
|
||||
//No items in inventory.
|
||||
} else {
|
||||
//Mob's Loot has been looted.
|
||||
if (aiAgent.isHasLoot()) {
|
||||
if (System.currentTimeMillis() > aiAgent.getDeathTime() + MBServerStatics.DESPAWN_TIMER_ONCE_LOOTED) {
|
||||
if (System.currentTimeMillis() > aiAgent.deathTime + MBServerStatics.DESPAWN_TIMER_ONCE_LOOTED) {
|
||||
aiAgent.despawn();
|
||||
//update time of death after mob despawns so respawn time happens after mob despawns.
|
||||
aiAgent.setDeathTime(System.currentTimeMillis());
|
||||
aiAgent.setState(STATE.Respawn);
|
||||
aiAgent.state = STATE.Respawn;
|
||||
}
|
||||
//Mob never had Loot.
|
||||
} else {
|
||||
if (System.currentTimeMillis() > aiAgent.getDeathTime() + MBServerStatics.DESPAWN_TIMER) {
|
||||
if (System.currentTimeMillis() > aiAgent.deathTime + MBServerStatics.DESPAWN_TIMER) {
|
||||
aiAgent.despawn();
|
||||
//update time of death after mob despawns so respawn time happens after mob despawns.
|
||||
aiAgent.setDeathTime(System.currentTimeMillis());
|
||||
aiAgent.setState(STATE.Respawn);
|
||||
aiAgent.state = STATE.Respawn;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1214,14 +1213,14 @@ public class MobileFSM {
|
||||
private static void guardAwake(Mob aiAgent) {
|
||||
|
||||
if (!aiAgent.isAlive()) {
|
||||
aiAgent.setState(STATE.Dead);
|
||||
aiAgent.state = STATE.Dead;
|
||||
return;
|
||||
}
|
||||
|
||||
if (aiAgent.getLoc().distanceSquared2D(aiAgent.getBindLoc()) > sqr(2000)) {
|
||||
|
||||
aiAgent.setWalkingHome(false);
|
||||
aiAgent.setState(STATE.Home);
|
||||
aiAgent.state = STATE.Home;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1232,12 +1231,12 @@ public class MobileFSM {
|
||||
aiAgent.setNoAggro(false);
|
||||
|
||||
// do nothing if no players are around.
|
||||
if (aiAgent.getPlayerAgroMap().isEmpty())
|
||||
if (aiAgent.playerAgroMap.isEmpty())
|
||||
return;
|
||||
|
||||
//Get the Map for Players that loaded this mob.
|
||||
|
||||
ConcurrentHashMap<Integer, Boolean> loadedPlayers = aiAgent.getPlayerAgroMap();
|
||||
ConcurrentHashMap<Integer, Boolean> loadedPlayers = aiAgent.playerAgroMap;
|
||||
|
||||
//no players currently have this mob loaded. return to IDLE.
|
||||
//aiAgent finished moving home, set aggro on.
|
||||
@@ -1342,13 +1341,13 @@ public class MobileFSM {
|
||||
if (aggro) {
|
||||
if (CombatUtilities.inRangeToAttack(aiAgent, loadedPlayer)) {
|
||||
aiAgent.setAggroTargetID(playerID);
|
||||
aiAgent.setState(STATE.Aggro);
|
||||
aiAgent.state = STATE.Aggro;
|
||||
return;
|
||||
}
|
||||
|
||||
if (MovementUtilities.inRangeToAggro(aiAgent, loadedPlayer)) {
|
||||
aiAgent.setAggroTargetID(playerID);
|
||||
aiAgent.setState(STATE.Aggro);
|
||||
aiAgent.state = STATE.Aggro;
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1356,12 +1355,12 @@ public class MobileFSM {
|
||||
|
||||
//attempt to patrol even if aiAgent isn't aggresive;
|
||||
if (aiAgent.isMoving() == false)
|
||||
aiAgent.setState(STATE.Patrol);
|
||||
aiAgent.state = STATE.Patrol;
|
||||
}
|
||||
private static void guardAggro(Mob aiAgent, int targetID) {
|
||||
|
||||
if (!aiAgent.isAlive()) {
|
||||
aiAgent.setState(STATE.Dead);
|
||||
aiAgent.state = STATE.Dead;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1376,26 +1375,26 @@ public class MobileFSM {
|
||||
PlayerCharacter aggroTarget = PlayerCharacter.getFromCache(targetID);
|
||||
|
||||
if (aggroTarget == null) {
|
||||
aiAgent.setState(STATE.Patrol);
|
||||
aiAgent.state = STATE.Patrol;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!aiAgent.canSee(aggroTarget)) {
|
||||
aiAgent.setCombatTarget(null);
|
||||
targetID = 0;
|
||||
aiAgent.setState(STATE.Patrol);
|
||||
aiAgent.state = STATE.Patrol;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!aggroTarget.isActive()) {
|
||||
aiAgent.setCombatTarget(null);
|
||||
targetID = 0;
|
||||
aiAgent.setState(STATE.Patrol);
|
||||
aiAgent.state = STATE.Patrol;
|
||||
return;
|
||||
}
|
||||
if (CombatUtilities.inRangeToAttack(aiAgent, aggroTarget)) {
|
||||
aiAgent.setCombatTarget(aggroTarget);
|
||||
aiAgent.setState(STATE.Attack);
|
||||
aiAgent.state = STATE.Attack;
|
||||
guardAttack(aiAgent);
|
||||
return;
|
||||
}
|
||||
@@ -1412,7 +1411,7 @@ public class MobileFSM {
|
||||
aiAgent.setAggroTargetID(0);
|
||||
aiAgent.setCombatTarget(null);
|
||||
MovementUtilities.moveToLocation(aiAgent, aiAgent.getTrueBindLoc(), 0);
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1420,7 +1419,7 @@ public class MobileFSM {
|
||||
aiAgent.setCombatTarget(null);
|
||||
aiAgent.setAggroTargetID(0);
|
||||
aiAgent.setWalkingHome(false);
|
||||
aiAgent.setState(STATE.Home);
|
||||
aiAgent.state = STATE.Home;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1437,8 +1436,8 @@ public class MobileFSM {
|
||||
}
|
||||
private static void guardPatrol(Mob aiAgent) {
|
||||
|
||||
if (aiAgent.getPlayerAgroMap().isEmpty()) {
|
||||
aiAgent.setState(STATE.Awake);
|
||||
if (aiAgent.playerAgroMap.isEmpty()) {
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1449,7 +1448,7 @@ public class MobileFSM {
|
||||
DispatchMessage.sendToAllInRange(aiAgent, rwss);
|
||||
}
|
||||
|
||||
if (aiAgent.getNpcOwner() == null) {
|
||||
if (aiAgent.npcOwner == null) {
|
||||
|
||||
if (!aiAgent.isWalk() || (aiAgent.isCombat() && aiAgent.getCombatTarget() == null)) {
|
||||
aiAgent.setWalkMode(true);
|
||||
@@ -1460,14 +1459,14 @@ public class MobileFSM {
|
||||
}
|
||||
|
||||
if (aiAgent.isMoving()) {
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
Building barrack = aiAgent.getBuilding();
|
||||
Building barrack = aiAgent.building;
|
||||
|
||||
if (barrack == null) {
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1480,7 +1479,7 @@ public class MobileFSM {
|
||||
}
|
||||
}
|
||||
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
|
||||
}
|
||||
@@ -1494,25 +1493,25 @@ public class MobileFSM {
|
||||
|
||||
}
|
||||
|
||||
Building barrack = ((Mob) aiAgent.getNpcOwner()).getBuilding();
|
||||
Building barrack = ((Mob) aiAgent.npcOwner).building;
|
||||
|
||||
if (barrack == null) {
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
if (barrack.getPatrolPoints() == null) {
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
if (barrack.getPatrolPoints().isEmpty()) {
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
if (aiAgent.isMoving()) {
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1528,24 +1527,24 @@ public class MobileFSM {
|
||||
if (patrolLoc != null) {
|
||||
if (MovementUtilities.canMove(aiAgent)) {
|
||||
MovementUtilities.aiMove(aiAgent, patrolLoc, true);
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
}
|
||||
private static void guardAttack(Mob aiAgent) {
|
||||
|
||||
if (!aiAgent.isAlive()) {
|
||||
aiAgent.setState(STATE.Dead);
|
||||
aiAgent.state = STATE.Dead;
|
||||
return;
|
||||
}
|
||||
|
||||
AbstractGameObject target = aiAgent.getCombatTarget();
|
||||
|
||||
if (target == null) {
|
||||
aiAgent.setState(STATE.Patrol);
|
||||
aiAgent.state = STATE.Patrol;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1556,13 +1555,13 @@ public class MobileFSM {
|
||||
|
||||
if (!player.isActive()) {
|
||||
aiAgent.setCombatTarget(null);
|
||||
aiAgent.setState(STATE.Patrol);
|
||||
aiAgent.state = STATE.Patrol;
|
||||
return;
|
||||
}
|
||||
|
||||
if (aiAgent.isNecroPet() && player.inSafeZone()) {
|
||||
aiAgent.setCombatTarget(null);
|
||||
aiAgent.setState(STATE.Idle);
|
||||
aiAgent.state = STATE.Idle;
|
||||
return;
|
||||
}
|
||||
if (canCast(aiAgent) == true) {
|
||||
@@ -1575,7 +1574,7 @@ public class MobileFSM {
|
||||
break;
|
||||
case Building:
|
||||
Logger.info("PLAYER GUARD ATTEMPTING TO ATTACK BUILDING IN " + aiAgent.getParentZone().getName());
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
break;
|
||||
case Mob:
|
||||
Mob mob = (Mob) target;
|
||||
@@ -1590,7 +1589,7 @@ public class MobileFSM {
|
||||
|
||||
aiAgent.setAggroTargetID(0);
|
||||
aiAgent.setCombatTarget(null);
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
}
|
||||
private static void respawn(Mob aiAgent) {
|
||||
|
||||
@@ -1599,26 +1598,26 @@ public class MobileFSM {
|
||||
|
||||
long spawnTime = aiAgent.getSpawnTime();
|
||||
|
||||
if (aiAgent.isPlayerGuard() && aiAgent.getNpcOwner() != null && !aiAgent.getNpcOwner().isAlive())
|
||||
if (aiAgent.isPlayerGuard() && aiAgent.npcOwner != null && !aiAgent.npcOwner.isAlive())
|
||||
return;
|
||||
|
||||
if (System.currentTimeMillis() > aiAgent.getDeathTime() + spawnTime) {
|
||||
if (System.currentTimeMillis() > aiAgent.deathTime + spawnTime) {
|
||||
aiAgent.respawn();
|
||||
aiAgent.setState(STATE.Idle);
|
||||
aiAgent.state = STATE.Idle;
|
||||
}
|
||||
}
|
||||
private static void retaliate(Mob aiAgent) {
|
||||
|
||||
if (aiAgent.getCombatTarget() == null)
|
||||
aiAgent.setState(STATE.Awake);
|
||||
aiAgent.state = STATE.Awake;
|
||||
|
||||
//out of range to attack move
|
||||
if (!MovementUtilities.canMove(aiAgent)) {
|
||||
aiAgent.setState(STATE.Attack);
|
||||
aiAgent.state = STATE.Attack;
|
||||
return;
|
||||
}
|
||||
|
||||
aiAgent.setState(STATE.Attack);
|
||||
aiAgent.state = STATE.Attack;
|
||||
|
||||
//lets make mobs ai less twitchy, Don't call another movement until mob reaches it's destination.
|
||||
if (aiAgent.isMoving())
|
||||
@@ -1730,7 +1729,7 @@ public class MobileFSM {
|
||||
Zone mobCamp = mob.getParentZone();
|
||||
for (Mob mob1 : mobCamp.zoneMobSet) {
|
||||
if (mob1.getMobBase().getFlags().contains(Enum.MobFlagType.RESPONDSTOCALLSFORHELP)) {
|
||||
if (mob1.getState() == STATE.Awake) {
|
||||
if (mob1.state == STATE.Awake) {
|
||||
if (CombatUtilities.inRange2D(mob, mob1, mob.getAggroRange()) == true) {
|
||||
MovementUtilities.moveToLocation(mob1, mob.getLoc(), 0);
|
||||
}
|
||||
@@ -1745,14 +1744,14 @@ public class MobileFSM {
|
||||
mob.setCombatTarget(null);
|
||||
mob.setAggroTargetID(0);
|
||||
mob.setWalkingHome(false);
|
||||
mob.setState(STATE.Home);
|
||||
mob.state = STATE.Home;
|
||||
return;
|
||||
}
|
||||
mob.updateMovementState();
|
||||
mob.updateLocation();
|
||||
if(CombatUtilities.inRange2D(mob,mob.getCombatTarget(), mob.getRange()) == true) {
|
||||
MovementUtilities.moveToLocation(mob, mob.getLoc(), 0);
|
||||
mob.setState(STATE.Attack);
|
||||
mob.state = STATE.Attack;
|
||||
}
|
||||
else {//if (mob.isMoving() == false){
|
||||
if(mob.getRange() > 15) {
|
||||
|
||||
@@ -40,10 +40,10 @@ public class MovementUtilities {
|
||||
if (agent.getContract() != null)
|
||||
guardCaptain = agent;
|
||||
else
|
||||
guardCaptain = (Mob) agent.getNpcOwner();
|
||||
guardCaptain = (Mob) agent.npcOwner;
|
||||
|
||||
if (guardCaptain != null){
|
||||
Building barracks = guardCaptain.getBuilding();
|
||||
Building barracks = guardCaptain.building;
|
||||
|
||||
if (barracks != null){
|
||||
City city = barracks.getCity();
|
||||
|
||||
Reference in New Issue
Block a user