Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 93d80c0005 |
@@ -0,0 +1,33 @@
|
|||||||
|
package engine.mobileAI.MobBehaviours;
|
||||||
|
|
||||||
|
import engine.gameManager.ZoneManager;
|
||||||
|
import engine.mobileAI.utilities.MovementUtilities;
|
||||||
|
import engine.objects.Mob;
|
||||||
|
import org.pmw.tinylog.Logger;
|
||||||
|
|
||||||
|
public class Pet {
|
||||||
|
|
||||||
|
public static void run(Mob pet){
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
if(StaticBehaviours.EarlyExit(pet))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (pet.getOwner() == null && pet.isNecroPet() == false && pet.isSiege() == false)
|
||||||
|
if (ZoneManager.getSeaFloor().zoneMobSet.contains(pet))
|
||||||
|
pet.killCharacter("no owner");
|
||||||
|
|
||||||
|
if(!pet.isSiege())
|
||||||
|
pet.BehaviourType.canRoam = true;
|
||||||
|
|
||||||
|
|
||||||
|
if (MovementUtilities.canMove(pet) && pet.BehaviourType.canRoam)
|
||||||
|
StaticBehaviours.CheckMobMovement(pet);
|
||||||
|
|
||||||
|
StaticBehaviours.CheckForAttack(pet);
|
||||||
|
} catch (Exception e) {
|
||||||
|
Logger.info(pet.getObjectUUID() + " " + pet.getName() + " Failed At: PetLogic" + " " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,146 @@
|
|||||||
|
package engine.mobileAI.MobBehaviours;
|
||||||
|
|
||||||
|
import engine.Enum;
|
||||||
|
import engine.objects.AbstractWorldObject;
|
||||||
|
import engine.objects.Mob;
|
||||||
|
import engine.objects.PlayerCharacter;
|
||||||
|
import org.pmw.tinylog.Logger;
|
||||||
|
|
||||||
|
public class PlayerGuard {
|
||||||
|
|
||||||
|
public static void run(Mob guard) {
|
||||||
|
|
||||||
|
if(StaticBehaviours.EarlyExit(guard))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (guard.mobPowers.isEmpty()) {
|
||||||
|
//mele
|
||||||
|
if (guard.BehaviourType.equals(Enum.MobBehaviourType.GuardWallArcher)) {
|
||||||
|
GuardWallArcherLogic(guard);
|
||||||
|
} else {
|
||||||
|
if (guard.BehaviourType.equals(Enum.MobBehaviourType.GuardCaptain)) {
|
||||||
|
GuardCaptainLogic(guard);
|
||||||
|
} else if (guard.BehaviourType.equals(Enum.MobBehaviourType.GuardMinion)) {
|
||||||
|
GuardMinionLogic(guard);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//caster
|
||||||
|
if (guard.BehaviourType.equals(Enum.MobBehaviourType.GuardCaptain)) {
|
||||||
|
MagisterCaptainLogic(guard);
|
||||||
|
} else if (guard.BehaviourType.equals(Enum.MobBehaviourType.GuardMinion)) {
|
||||||
|
MagisterMinionLogic(guard);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void GuardCaptainLogic(Mob mob) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
StaticBehaviours.checkToDropGuardAggro(mob);
|
||||||
|
if (mob.getCombatTarget() == null)
|
||||||
|
StaticBehaviours.CheckForPlayerGuardAggro(mob);
|
||||||
|
|
||||||
|
AbstractWorldObject newTarget = StaticBehaviours.ChangeTargetFromHateValue(mob);
|
||||||
|
|
||||||
|
if (newTarget != null) {
|
||||||
|
|
||||||
|
if (newTarget.getObjectType().equals(Enum.GameObjectType.PlayerCharacter)) {
|
||||||
|
if (StaticBehaviours.GuardCanAggro(mob, (PlayerCharacter) newTarget))
|
||||||
|
mob.setCombatTarget(newTarget);
|
||||||
|
} else
|
||||||
|
mob.setCombatTarget(newTarget);
|
||||||
|
|
||||||
|
}
|
||||||
|
StaticBehaviours.CheckMobMovement(mob);
|
||||||
|
StaticBehaviours.CheckForAttack(mob);
|
||||||
|
} catch (Exception e) {
|
||||||
|
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: GuardCaptainLogic" + " " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void GuardMinionLogic(Mob mob) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
StaticBehaviours.checkToDropGuardAggro(mob);
|
||||||
|
|
||||||
|
boolean isComanded = mob.npcOwner.isAlive();
|
||||||
|
if (!isComanded) {
|
||||||
|
GuardCaptainLogic(mob);
|
||||||
|
}else {
|
||||||
|
if (mob.npcOwner.getCombatTarget() != null)
|
||||||
|
mob.setCombatTarget(mob.npcOwner.getCombatTarget());
|
||||||
|
else
|
||||||
|
if (mob.getCombatTarget() != null)
|
||||||
|
mob.setCombatTarget(null);
|
||||||
|
}
|
||||||
|
StaticBehaviours.CheckMobMovement(mob);
|
||||||
|
StaticBehaviours.CheckForAttack(mob);
|
||||||
|
} catch (Exception e) {
|
||||||
|
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: GuardMinionLogic" + " " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void GuardWallArcherLogic(Mob mob) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
StaticBehaviours.checkToDropGuardAggro(mob);
|
||||||
|
|
||||||
|
if (mob.getCombatTarget() == null)
|
||||||
|
StaticBehaviours.CheckForPlayerGuardAggro(mob);
|
||||||
|
else
|
||||||
|
StaticBehaviours.CheckForAttack(mob);
|
||||||
|
} catch (Exception e) {
|
||||||
|
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: GuardWallArcherLogic" + " " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void MagisterCaptainLogic(Mob mob){
|
||||||
|
try {
|
||||||
|
StaticBehaviours.checkToDropGuardAggro(mob);
|
||||||
|
if (mob.getCombatTarget() == null)
|
||||||
|
StaticBehaviours.CheckForPlayerGuardAggro(mob);
|
||||||
|
|
||||||
|
AbstractWorldObject newTarget = StaticBehaviours.ChangeTargetFromHateValue(mob);
|
||||||
|
|
||||||
|
if (newTarget != null) {
|
||||||
|
|
||||||
|
if (newTarget.getObjectType().equals(Enum.GameObjectType.PlayerCharacter)) {
|
||||||
|
if (StaticBehaviours.GuardCanAggro(mob, (PlayerCharacter) newTarget))
|
||||||
|
mob.setCombatTarget(newTarget);
|
||||||
|
} else
|
||||||
|
mob.setCombatTarget(newTarget);
|
||||||
|
|
||||||
|
}
|
||||||
|
StaticBehaviours.CheckMobMovement(mob);
|
||||||
|
CheckForCast(mob);
|
||||||
|
} catch (Exception e) {
|
||||||
|
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: GuardCaptainLogic" + " " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void MagisterMinionLogic(Mob mob){
|
||||||
|
try {
|
||||||
|
StaticBehaviours.checkToDropGuardAggro(mob);
|
||||||
|
|
||||||
|
boolean isComanded = mob.npcOwner.isAlive();
|
||||||
|
if (!isComanded) {
|
||||||
|
MagisterCaptainLogic(mob);
|
||||||
|
}else {
|
||||||
|
if (mob.npcOwner.getCombatTarget() != null)
|
||||||
|
mob.setCombatTarget(mob.npcOwner.getCombatTarget());
|
||||||
|
else
|
||||||
|
if (mob.getCombatTarget() != null)
|
||||||
|
mob.setCombatTarget(null);
|
||||||
|
}
|
||||||
|
StaticBehaviours.CheckMobMovement(mob);
|
||||||
|
CheckForCast(mob);
|
||||||
|
} catch (Exception e) {
|
||||||
|
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: GuardMinionLogic" + " " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void CheckForCast(Mob mob){
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package engine.mobileAI.MobBehaviours;
|
||||||
|
|
||||||
|
import engine.Enum;
|
||||||
|
import engine.objects.Mob;
|
||||||
|
|
||||||
|
public class SiegeEngine {
|
||||||
|
|
||||||
|
public static void run(Mob engine){
|
||||||
|
|
||||||
|
if(StaticBehaviours.EarlyExit(engine))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(engine.getOwner() == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(engine.combatTarget == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(engine.combatTarget.loc.distanceSquared(engine.loc) > engine.getRange() * engine.getRange())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(!engine.combatTarget.getObjectType().equals(Enum.GameObjectType.Building))
|
||||||
|
return;
|
||||||
|
|
||||||
|
StaticBehaviours.CheckForAttack(engine);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
package engine.mobileAI.MobBehaviours;
|
||||||
|
|
||||||
|
import engine.Enum;
|
||||||
|
import engine.objects.AbstractWorldObject;
|
||||||
|
import engine.objects.Mob;
|
||||||
|
import org.pmw.tinylog.Logger;
|
||||||
|
|
||||||
|
public class Standard {
|
||||||
|
|
||||||
|
public static void run(Mob mob){
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
if(StaticBehaviours.EarlyExit(mob))
|
||||||
|
return;
|
||||||
|
|
||||||
|
//check for players that can be aggroed if mob is agressive and has no target
|
||||||
|
|
||||||
|
if (mob.getCombatTarget() != null && !mob.playerAgroMap.containsKey(mob.getCombatTarget().getObjectUUID()))
|
||||||
|
mob.setCombatTarget(null);
|
||||||
|
|
||||||
|
if (mob.BehaviourType.isAgressive) {
|
||||||
|
|
||||||
|
AbstractWorldObject newTarget = StaticBehaviours.ChangeTargetFromHateValue(mob);
|
||||||
|
|
||||||
|
if (newTarget != null)
|
||||||
|
mob.setCombatTarget(newTarget);
|
||||||
|
else {
|
||||||
|
if (mob.getCombatTarget() == null) {
|
||||||
|
if (mob.BehaviourType == Enum.MobBehaviourType.HamletGuard)
|
||||||
|
StaticBehaviours.SafeGuardAggro(mob); //safehold guard
|
||||||
|
else
|
||||||
|
StaticBehaviours.CheckForAggro(mob); //normal aggro
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//check if mob can move for patrol or moving to target
|
||||||
|
|
||||||
|
if (mob.BehaviourType.canRoam)
|
||||||
|
StaticBehaviours.CheckMobMovement(mob);
|
||||||
|
|
||||||
|
//check if mob can attack if it isn't wimpy
|
||||||
|
|
||||||
|
if (!mob.BehaviourType.isWimpy && mob.getCombatTarget() != null)
|
||||||
|
StaticBehaviours.CheckForAttack(mob);
|
||||||
|
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
Logger.info(mob.getObjectUUID() + " " + mob.getName() + " Failed At: DefaultLogic" + " " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -3,6 +3,7 @@ package engine.mobileAI.Threads;
|
|||||||
import engine.gameManager.ConfigManager;
|
import engine.gameManager.ConfigManager;
|
||||||
import engine.mobileAI.MobAI;
|
import engine.mobileAI.MobAI;
|
||||||
import engine.gameManager.ZoneManager;
|
import engine.gameManager.ZoneManager;
|
||||||
|
import engine.mobileAI.MobBehaviours.StaticBehaviours;
|
||||||
import engine.objects.Mob;
|
import engine.objects.Mob;
|
||||||
import engine.objects.Zone;
|
import engine.objects.Zone;
|
||||||
import engine.server.MBServerStatics;
|
import engine.server.MBServerStatics;
|
||||||
@@ -33,7 +34,8 @@ public class MobAIThread implements Runnable{
|
|||||||
for (Mob mob : zone.zoneMobSet) {
|
for (Mob mob : zone.zoneMobSet) {
|
||||||
try {
|
try {
|
||||||
if (mob != null) {
|
if (mob != null) {
|
||||||
MobAI.DetermineAction(mob);
|
//MobAI.DetermineAction(mob);
|
||||||
|
StaticBehaviours.runBehaviour(mob);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Logger.error("Error processing Mob [Name: {}, UUID: {}]", mob.getName(), mob.getObjectUUID(), e);
|
Logger.error("Error processing Mob [Name: {}, UUID: {}]", mob.getName(), mob.getObjectUUID(), e);
|
||||||
|
|||||||
Reference in New Issue
Block a user