From ca909d648962b6bd2320801b3067326dbb1416a2 Mon Sep 17 00:00:00 2001 From: FatBoy-DOTC Date: Fri, 28 Mar 2025 06:43:16 -0500 Subject: [PATCH] pet AI handler --- .../mobileAI/MobHandlers/PetHandler.java | 50 +++++++++++++++++++ .../mobileAI/MobHandlers/SiegeHandler.java | 13 ++++- 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/src/engine/mobileAI/MobHandlers/PetHandler.java b/src/engine/mobileAI/MobHandlers/PetHandler.java index fef53515..5b1f9876 100644 --- a/src/engine/mobileAI/MobHandlers/PetHandler.java +++ b/src/engine/mobileAI/MobHandlers/PetHandler.java @@ -1,10 +1,60 @@ package engine.mobileAI.MobHandlers; +import engine.Enum; +import engine.gameManager.MovementManager; +import engine.gameManager.ZoneManager; +import engine.mobileAI.utilities.CombatUtilities; +import engine.mobileAI.utilities.MovementUtilities; +import engine.objects.City; import engine.objects.Mob; +import engine.objects.PlayerCharacter; public class PetHandler { public static void run(Mob pet){ + PlayerCharacter owner = pet.getOwner(); + if(owner == null) + return; + + if(!pet.isAlive()){ + return; + } + + if(!owner.isAlive()) { + owner.dismissPet(); + return; + } + + pet.updateLocation(); + + if(pet.combatTarget == null){ + //follow owner + if(!CombatUtilities.inRangeToAttack(pet,owner)) { + MovementUtilities.moveToLocation(pet, owner.loc, pet.getRange()); + } + }else{ + //chase target + if(!CombatUtilities.inRangeToAttack(pet,pet.combatTarget)) { + MovementUtilities.moveToLocation(pet, pet.combatTarget.loc, pet.getRange()); + }else{ + if(pet.getLastAttackTime() > System.currentTimeMillis()) + return; + + pet.setLastAttackTime(System.currentTimeMillis() + 3000); + + //attack target + if(pet.combatTarget.getObjectType().equals(Enum.GameObjectType.Building)){ + //attacking building + City playercity = ZoneManager.getCityAtLocation(pet.getLoc()); + if (playercity != null) + for (Mob guard : playercity.getParent().zoneMobSet) + if (guard.combatTarget == null && guard.getGuild() != null && pet.getGuild() != null && !guard.getGuild().equals(pet.getGuild())) + MovementUtilities.aiMove(guard,pet.loc,false); + } + + CombatUtilities.combatCycle(pet,pet.combatTarget,true,null); + } + } } } diff --git a/src/engine/mobileAI/MobHandlers/SiegeHandler.java b/src/engine/mobileAI/MobHandlers/SiegeHandler.java index 8d7dfdae..e1ca82f1 100644 --- a/src/engine/mobileAI/MobHandlers/SiegeHandler.java +++ b/src/engine/mobileAI/MobHandlers/SiegeHandler.java @@ -1,8 +1,12 @@ package engine.mobileAI.MobHandlers; import engine.Enum; +import engine.gameManager.MovementManager; +import engine.gameManager.ZoneManager; import engine.mobileAI.utilities.CombatUtilities; +import engine.mobileAI.utilities.MovementUtilities; import engine.objects.Building; +import engine.objects.City; import engine.objects.Mob; public class SiegeHandler { @@ -38,7 +42,14 @@ public class SiegeHandler { if(CombatUtilities.inRangeToAttack(engine,engine.combatTarget)){ CombatUtilities.combatCycle(engine, engine.combatTarget, true, null); - engine.setLastAttackTime(System.currentTimeMillis() + 11000); + engine.setLastAttackTime(System.currentTimeMillis() + 15000); + City playercity = ZoneManager.getCityAtLocation(engine.getLoc()); + if (playercity != null) + for (Mob guard : playercity.getParent().zoneMobSet) + if (guard.isPlayerGuard && guard.combatTarget == null && guard.getGuild() != null && engine.getGuild() != null && !guard.getGuild().equals(engine.getGuild())) + MovementUtilities.aiMove(guard,engine.loc,false); + + MovementManager.sendRWSSMsg(engine); } } }