diff --git a/src/engine/ai/MobileFSM.java b/src/engine/ai/MobileFSM.java index d4d2f6f7..34a357ee 100644 --- a/src/engine/ai/MobileFSM.java +++ b/src/engine/ai/MobileFSM.java @@ -233,6 +233,7 @@ public class MobileFSM { // Method picks a random spell from a mobile's list of powers // and casts it on the current target (or itself). Validation // (including empty lists) is done previously within canCast(); + ArrayList powerTokens; ArrayList purgeTokens; PlayerCharacter target = (PlayerCharacter) mob.getCombatTarget(); @@ -259,6 +260,21 @@ public class MobileFSM { int powerToken = powerTokens.get(ThreadLocalRandom.current().nextInt(powerTokens.size())); int powerRank = mob.mobPowers.get(powerToken); PowersBase mobPower = PowersManager.getPowerByToken(powerToken); + //check for hit-roll + if(mobPower.requiresHitRoll) { + if (CombatUtilities.triggerDefense(mob, mob.getCombatTarget())) { + return false; + } + if (CombatUtilities.triggerDodge(mob, mob.getCombatTarget())) { + return false; + } + if (CombatUtilities.triggerBlock(mob, mob.getCombatTarget())) { + return false; + } + if (CombatUtilities.triggerParry(mob, mob.getCombatTarget())) { + return false; + } + } // Cast the spell if (CombatUtilities.inRange2D(mob, mob.getCombatTarget(), mobPower.getRange())) { PowersManager.useMobPower(mob, (AbstractCharacter) mob.getCombatTarget(), mobPower, powerRank); @@ -505,7 +521,7 @@ public class MobileFSM { } if (mob.isPlayerGuard() && !mob.despawned) { City current = ZoneManager.getCityAtLocation(mob.getLoc()); - if (current == null || current.equals(mob.getGuild().getOwnedCity()) == false || mob.playerAgroMap.isEmpty()) { + if (current == null || current.equals(mob.getGuild().getOwnedCity()) == false) { PowersBase recall = PowersManager.getPowerByToken(-1994153779); PowersManager.useMobPower(mob, mob, recall, 40); mob.setCombatTarget(null);