|
|
@ -63,7 +63,6 @@ public class MobileFSM { |
|
|
|
case Idle: |
|
|
|
case Idle: |
|
|
|
if (mob.isAlive()) |
|
|
|
if (mob.isAlive()) |
|
|
|
mob.updateLocation(); |
|
|
|
mob.updateLocation(); |
|
|
|
|
|
|
|
|
|
|
|
if (mob.isPlayerGuard()) { |
|
|
|
if (mob.isPlayerGuard()) { |
|
|
|
guardAwake(mob); |
|
|
|
guardAwake(mob); |
|
|
|
break; |
|
|
|
break; |
|
|
@ -167,9 +166,6 @@ public class MobileFSM { |
|
|
|
} |
|
|
|
} |
|
|
|
return false; |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
public static Mob getMobile(int mobileID) { |
|
|
|
|
|
|
|
return Mob.getFromCache(mobileID); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
private static void idle(Mob mob) { |
|
|
|
private static void idle(Mob mob) { |
|
|
|
|
|
|
|
|
|
|
|
if (mob.getLoc().distanceSquared2D(mob.getBindLoc()) > sqr(2000)) { |
|
|
|
if (mob.getLoc().distanceSquared2D(mob.getBindLoc()) > sqr(2000)) { |
|
|
@ -1070,31 +1066,6 @@ public class MobileFSM { |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
HashMap<Integer, Integer> staticPowers = aiAgent.getMobBase().getStaticPowers(); |
|
|
|
|
|
|
|
if (staticPowers != null && !staticPowers.isEmpty()) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int chance = ThreadLocalRandom.current().nextInt(100); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (chance <= MBServerStatics.AI_POWER_DIVISOR) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ArrayList<Integer> powerList = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (Integer key : staticPowers.keySet()) { |
|
|
|
|
|
|
|
powerList.add(key); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int randomPower = ThreadLocalRandom.current().nextInt(powerList.size()); |
|
|
|
|
|
|
|
int powerToken = powerList.get(randomPower); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PowersBase pb = PowersManager.getPowerByToken(powerToken); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (pb != null) |
|
|
|
|
|
|
|
PowersManager.useMobPower(aiAgent, aggroTarget, pb, staticPowers.get(powerToken)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!MovementUtilities.inRangeOfBindLocation(aiAgent)) { |
|
|
|
if (!MovementUtilities.inRangeOfBindLocation(aiAgent)) { |
|
|
|
aiAgent.setCombatTarget(null); |
|
|
|
aiAgent.setCombatTarget(null); |
|
|
|
aiAgent.setAggroTargetID(0); |
|
|
|
aiAgent.setAggroTargetID(0); |
|
|
@ -1213,14 +1184,6 @@ public class MobileFSM { |
|
|
|
} |
|
|
|
} |
|
|
|
aiAgent.setState(STATE.Awake); |
|
|
|
aiAgent.setState(STATE.Awake); |
|
|
|
} |
|
|
|
} |
|
|
|
public static void goHome(Mob aiAgent, boolean walk) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (aiAgent.getState() != STATE.Dead) { |
|
|
|
|
|
|
|
aiAgent.setWalkingHome(walk); |
|
|
|
|
|
|
|
aiAgent.setAggroTargetID(0); |
|
|
|
|
|
|
|
aiAgent.setState(STATE.Home); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
private static void dead(Mob aiAgent) { |
|
|
|
private static void dead(Mob aiAgent) { |
|
|
|
//Despawn Timer with Loot currently in inventory.
|
|
|
|
//Despawn Timer with Loot currently in inventory.
|
|
|
|
if (aiAgent.getCharItemManager().getInventoryCount() > 0) { |
|
|
|
if (aiAgent.getCharItemManager().getInventoryCount() > 0) { |
|
|
@ -1633,21 +1596,6 @@ public class MobileFSM { |
|
|
|
aiAgent.setCombatTarget(null); |
|
|
|
aiAgent.setCombatTarget(null); |
|
|
|
aiAgent.setState(STATE.Awake); |
|
|
|
aiAgent.setState(STATE.Awake); |
|
|
|
} |
|
|
|
} |
|
|
|
private static void guardRespawn(Mob aiAgent) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!aiAgent.canRespawn()) |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (aiAgent.isPlayerGuard() && aiAgent.getNpcOwner() != null && !aiAgent.getNpcOwner().isAlive()) |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
long spawnTime = aiAgent.getSpawnTime(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (System.currentTimeMillis() > aiAgent.getDeathTime() + spawnTime) { |
|
|
|
|
|
|
|
aiAgent.respawn(); |
|
|
|
|
|
|
|
aiAgent.setState(STATE.Idle); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
private static void respawn(Mob aiAgent) { |
|
|
|
private static void respawn(Mob aiAgent) { |
|
|
|
|
|
|
|
|
|
|
|
if (!aiAgent.canRespawn()) |
|
|
|
if (!aiAgent.canRespawn()) |
|
|
@ -1682,13 +1630,6 @@ public class MobileFSM { |
|
|
|
|
|
|
|
|
|
|
|
MovementUtilities.moveToLocation(aiAgent, aiAgent.getCombatTarget().getLoc(), aiAgent.getRange()); |
|
|
|
MovementUtilities.moveToLocation(aiAgent, aiAgent.getCombatTarget().getLoc(), aiAgent.getRange()); |
|
|
|
} |
|
|
|
} |
|
|
|
private static void moveToWorldObjectRegion(Mob mob, AbstractWorldObject regionObject) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (regionObject.getRegion() == null) |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MovementManager.translocate(mob, regionObject.getLoc(), null); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
public static boolean canCast(Mob mob) { |
|
|
|
public static boolean canCast(Mob mob) { |
|
|
|
if(mob == null){ |
|
|
|
if(mob == null){ |
|
|
|
return false; |
|
|
|
return false; |
|
|
|