From 7960ba617c5aa62d412942ac9323877f01e68787 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Mart=C3=ADn?= Date: Wed, 26 Feb 2025 19:13:30 +0100 Subject: [PATCH 1/2] feat: Added the Extra movement conditions --- .../behaviours/defense/DefenseConfig.java | 2 +- .../behaviours/defense/DefenseModule.java | 2 +- .../java/com/deeme/modules/PVPModule.java | 2 +- .../com/deeme/modules/SentinelModule.java | 2 +- .../java/com/deeme/modules/pvp/PVPConfig.java | 2 +- .../shared/movement/ExtraMovementLogic.java | 174 ++++++++++++++++++ .../deeme/shared/movement/MovementConfig.java | 27 +++ .../shared/movement/MovementModeEnum.java | 8 + .../movement/MovementWithConditions.java | 16 ++ .../deeme/types/config/SentinelConfig.java | 2 +- src/main/resources/plugin.json | 4 +- 11 files changed, 233 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/deeme/shared/movement/ExtraMovementLogic.java create mode 100644 src/main/java/com/deeme/shared/movement/MovementConfig.java create mode 100644 src/main/java/com/deeme/shared/movement/MovementModeEnum.java create mode 100644 src/main/java/com/deeme/shared/movement/MovementWithConditions.java diff --git a/src/main/java/com/deeme/behaviours/defense/DefenseConfig.java b/src/main/java/com/deeme/behaviours/defense/DefenseConfig.java index 8baddf4b..2ca66d2b 100644 --- a/src/main/java/com/deeme/behaviours/defense/DefenseConfig.java +++ b/src/main/java/com/deeme/behaviours/defense/DefenseConfig.java @@ -8,7 +8,7 @@ import com.deeme.types.config.ExtraKeyConditions; import com.deeme.types.config.ExtraKeyConditionsSelectable; import com.deemeplus.general.configchanger.ExtraConfigChangerConfig; -import com.deemeplus.general.movement.MovementConfig; +import com.deeme.shared.movement.MovementConfig; import eu.darkbot.api.config.annotations.Configuration; import eu.darkbot.api.config.annotations.Dropdown; diff --git a/src/main/java/com/deeme/behaviours/defense/DefenseModule.java b/src/main/java/com/deeme/behaviours/defense/DefenseModule.java index d5affc18..30aa2eeb 100644 --- a/src/main/java/com/deeme/behaviours/defense/DefenseModule.java +++ b/src/main/java/com/deeme/behaviours/defense/DefenseModule.java @@ -1,7 +1,7 @@ package com.deeme.behaviours.defense; import com.deeme.types.ShipAttacker; -import com.deemeplus.general.movement.ExtraMovementLogic; +import com.deeme.shared.movement.ExtraMovementLogic; import com.deemeplus.general.configchanger.ExtraCChangerLogic; import eu.darkbot.api.PluginAPI; diff --git a/src/main/java/com/deeme/modules/PVPModule.java b/src/main/java/com/deeme/modules/PVPModule.java index d81b645c..a32a0690 100644 --- a/src/main/java/com/deeme/modules/PVPModule.java +++ b/src/main/java/com/deeme/modules/PVPModule.java @@ -7,7 +7,7 @@ import com.deeme.types.VerifierChecker; import com.deeme.types.backpage.Utils; import com.deemeplus.general.configchanger.ExtraCChangerLogic; -import com.deemeplus.general.movement.ExtraMovementLogic; +import com.deeme.shared.movement.ExtraMovementLogic; import eu.darkbot.api.PluginAPI; import eu.darkbot.api.config.ConfigSetting; diff --git a/src/main/java/com/deeme/modules/SentinelModule.java b/src/main/java/com/deeme/modules/SentinelModule.java index 9d03ba1b..5686e554 100644 --- a/src/main/java/com/deeme/modules/SentinelModule.java +++ b/src/main/java/com/deeme/modules/SentinelModule.java @@ -6,7 +6,7 @@ import com.deeme.types.backpage.Utils; import com.deeme.types.config.SentinelConfig; import com.deemeplus.general.configchanger.ExtraCChangerLogic; -import com.deemeplus.general.movement.ExtraMovementLogic; +import com.deeme.shared.movement.ExtraMovementLogic; import com.github.manolo8.darkbot.Main; import eu.darkbot.api.PluginAPI; diff --git a/src/main/java/com/deeme/modules/pvp/PVPConfig.java b/src/main/java/com/deeme/modules/pvp/PVPConfig.java index fa8fa491..352d6de1 100644 --- a/src/main/java/com/deeme/modules/pvp/PVPConfig.java +++ b/src/main/java/com/deeme/modules/pvp/PVPConfig.java @@ -4,7 +4,7 @@ import com.deeme.modules.sentinel.Humanizer; import com.deeme.types.config.ExtraKeyConditions; import com.deemeplus.general.configchanger.ExtraConfigChangerConfig; -import com.deemeplus.general.movement.MovementConfig; +import com.deeme.shared.movement.MovementConfig; import eu.darkbot.api.config.annotations.Configuration; import eu.darkbot.api.config.annotations.Number; diff --git a/src/main/java/com/deeme/shared/movement/ExtraMovementLogic.java b/src/main/java/com/deeme/shared/movement/ExtraMovementLogic.java new file mode 100644 index 00000000..05b1f717 --- /dev/null +++ b/src/main/java/com/deeme/shared/movement/ExtraMovementLogic.java @@ -0,0 +1,174 @@ +package com.deeme.shared.movement; + +import java.util.Comparator; +import java.util.Optional; +import java.util.Random; + +import eu.darkbot.api.PluginAPI; +import eu.darkbot.api.config.types.Condition; +import eu.darkbot.api.game.entities.Entity; +import eu.darkbot.api.game.entities.Ship; +import eu.darkbot.api.game.group.GroupMember; +import eu.darkbot.api.game.other.Location; +import eu.darkbot.api.game.other.Lockable; +import eu.darkbot.api.managers.GroupAPI; +import eu.darkbot.api.managers.HeroAPI; +import eu.darkbot.api.managers.MovementAPI; +import eu.darkbot.api.utils.Inject; +import eu.darkbot.shared.utils.SafetyFinder; + +public class ExtraMovementLogic { + private final PluginAPI api; + private final HeroAPI hero; + private final MovementAPI movement; + private final SafetyFinder safetyFinder; + private final GroupAPI group; + + private static final int DISTANCE_TO_USE_VS_MODE = 1500; + + private MovementConfig config; + private Random rnd; + + public ExtraMovementLogic(PluginAPI api, MovementConfig config) { + this(api, api.requireAPI(HeroAPI.class), api.requireAPI(MovementAPI.class), config); + } + + @Inject + public ExtraMovementLogic(PluginAPI api, HeroAPI hero, MovementAPI movement, MovementConfig config) { + this.api = api; + this.hero = hero; + this.movement = movement; + this.group = api.getAPI(GroupAPI.class); + this.safetyFinder = api.requireInstance(SafetyFinder.class); + this.config = config; + this.rnd = new Random(); + } + + public void tick() { + move(); + } + + private void move() { + MovementModeEnum movementSelected = getMovementMode(); + + switch (movementSelected) { + case VSSAFETY: + if (!safetyFinder.tick()) { + break; + } + case VS: + vsMove(); + break; + case RANDOM: + if (!movement.isMoving() || movement.isOutOfMap()) { + movement.moveRandom(); + } + break; + case GROUPVSSAFETY: + if (safetyFinder.tick()) { + GroupMember groupMember = getClosestMember(); + if (groupMember != null) { + if (groupMember.getLocation().distanceTo(hero) < DISTANCE_TO_USE_VS_MODE) { + vsMove(); + } else { + movement.moveTo(groupMember.getLocation()); + } + } else { + vsMove(); + } + } + break; + case GROUPVS: + GroupMember groupMember = getClosestMember(); + if (groupMember != null) { + if (groupMember.getLocation().distanceTo(hero) < DISTANCE_TO_USE_VS_MODE) { + vsMove(); + } else { + movement.moveTo(groupMember.getLocation()); + } + } else { + vsMove(); + } + break; + default: + if (safetyFinder.tick()) { + vsMove(); + } + break; + } + } + + private MovementModeEnum getMovementMode() { + if (checkCondition(config.movementCondtion1.condition)) { + return config.movementCondtion1.movementMode; + } + if (checkCondition(config.movementCondtion2.condition)) { + return config.movementCondtion2.movementMode; + } + if (checkCondition(config.movementCondtion3.condition)) { + return config.movementCondtion3.movementMode; + } + if (checkCondition(config.movementCondtion4.condition)) { + return config.movementCondtion4.movementMode; + } + if (checkCondition(config.movementCondtion5.condition)) { + return config.movementCondtion5.movementMode; + } + + return config.defaultMovementMode; + } + + private boolean checkCondition(Condition condition) { + if (condition == null) { + return false; + } + + return condition.get(api).allows(); + } + + private Optional getDestination() { + Ship target = hero.getTargetAs(Ship.class); + if (target != null && target.isValid()) { + return Optional.of(target.getDestination().orElse(target.getLocationInfo().destinationInTime(500))); + } else { + Entity other = hero.getTarget(); + if (target != null && target.isValid()) { + return Optional.of(other.getLocationInfo()); + } + } + + Lockable t = hero.getLocalTarget(); + if (t != null && t.isValid()) { + return Optional.of(t.getLocationInfo()); + } + + return Optional.empty(); + } + + private void vsMove() { + Location targetLoc = getDestination().orElse(null); + + if (targetLoc == null) { + return; + } + + double distance = hero.getLocationInfo().distanceTo(targetLoc); + if (distance > 600) { + if (movement.canMove(targetLoc)) { + movement.moveTo(targetLoc); + } + } else if (!movement.isMoving()) { + movement.moveTo(Location.of(targetLoc, rnd.nextInt(360), distance)); + } + } + + private GroupMember getClosestMember() { + if (group.hasGroup()) { + return group.getMembers().stream() + .filter(member -> !member.isDead() && member.getMapId() == hero.getMap().getId()) + .min(Comparator.comparingDouble(m -> m.getLocation().distanceTo(hero))) + .orElse(null); + } + return null; + } +} diff --git a/src/main/java/com/deeme/shared/movement/MovementConfig.java b/src/main/java/com/deeme/shared/movement/MovementConfig.java new file mode 100644 index 00000000..bc62670b --- /dev/null +++ b/src/main/java/com/deeme/shared/movement/MovementConfig.java @@ -0,0 +1,27 @@ +package com.deeme.shared.movement; + +import eu.darkbot.api.config.annotations.Configuration; +import eu.darkbot.api.config.annotations.Dropdown; +import eu.darkbot.api.config.annotations.Option; + +@Configuration("movement_config") +public class MovementConfig { + @Option("movement_config.default") + @Dropdown + public MovementModeEnum defaultMovementMode = MovementModeEnum.VS; + + @Option("movement_config.condition") + public MovementWithConditions movementCondtion1 = new MovementWithConditions(); + + @Option("movement_config.condition") + public MovementWithConditions movementCondtion2 = new MovementWithConditions(); + + @Option("movement_config.condition") + public MovementWithConditions movementCondtion3 = new MovementWithConditions(); + + @Option("movement_config.condition") + public MovementWithConditions movementCondtion4 = new MovementWithConditions(); + + @Option("movement_config.condition") + public MovementWithConditions movementCondtion5 = new MovementWithConditions(); +} diff --git a/src/main/java/com/deeme/shared/movement/MovementModeEnum.java b/src/main/java/com/deeme/shared/movement/MovementModeEnum.java new file mode 100644 index 00000000..1e247568 --- /dev/null +++ b/src/main/java/com/deeme/shared/movement/MovementModeEnum.java @@ -0,0 +1,8 @@ +package com.deeme.shared.movement; + +import eu.darkbot.api.config.annotations.Configuration; + +@Configuration("defense.movement_mode.list") +public enum MovementModeEnum { + VS, VSSAFETY, RANDOM, GROUPVSSAFETY, GROUPVS; +} diff --git a/src/main/java/com/deeme/shared/movement/MovementWithConditions.java b/src/main/java/com/deeme/shared/movement/MovementWithConditions.java new file mode 100644 index 00000000..95f6389b --- /dev/null +++ b/src/main/java/com/deeme/shared/movement/MovementWithConditions.java @@ -0,0 +1,16 @@ +package com.deeme.shared.movement; + +import eu.darkbot.api.config.annotations.Configuration; +import eu.darkbot.api.config.annotations.Dropdown; +import eu.darkbot.api.config.annotations.Option; +import eu.darkbot.api.config.types.Condition; + +@Configuration("movement_conditions") +public class MovementWithConditions { + @Option("defense.movement_mode") + @Dropdown + public MovementModeEnum movementMode = MovementModeEnum.VSSAFETY; + + @Option("general.condition") + public Condition condition; +} diff --git a/src/main/java/com/deeme/types/config/SentinelConfig.java b/src/main/java/com/deeme/types/config/SentinelConfig.java index e7ad275f..5725a22c 100644 --- a/src/main/java/com/deeme/types/config/SentinelConfig.java +++ b/src/main/java/com/deeme/types/config/SentinelConfig.java @@ -3,7 +3,7 @@ import com.deeme.behaviours.defense.AmmoConfig; import com.deeme.modules.sentinel.Humanizer; import com.deemeplus.general.configchanger.ExtraConfigChangerConfig; -import com.deemeplus.general.movement.MovementConfig; +import com.deeme.shared.movement.MovementConfig; import com.github.manolo8.darkbot.config.PlayerTag; import com.github.manolo8.darkbot.config.types.Tag; import com.github.manolo8.darkbot.config.types.TagDefault; diff --git a/src/main/resources/plugin.json b/src/main/resources/plugin.json index 5b92a4e4..5bd37df5 100644 --- a/src/main/resources/plugin.json +++ b/src/main/resources/plugin.json @@ -1,7 +1,7 @@ { "name": "DmPlugin", "author": "Dm94Dani", - "version": "2.3.8", + "version": "2.3.9", "minVersion": "1.131", "supportedVersion": "1.131.2", "basePackage": "com.deeme", @@ -35,6 +35,6 @@ ], "donation": "https://ko-fi.com/deeme", "discord": "https://discord.gg/GPRTRRZJPw", - "download": "https://github.com/darkbot-reloaded/DmPlugin/releases/download/v2.3.8/DmPlugin.jar", + "download": "https://github.com/darkbot-reloaded/DmPlugin/releases/download/v2.3.9/DmPlugin.jar", "update": "https://raw.githubusercontent.com/darkbot-reloaded/DmPlugin/master/src/main/resources/plugin.json" } From 1365964dc7c5799bbfa360aefd9992542c34edeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Mart=C3=ADn?= Date: Wed, 26 Feb 2025 19:52:08 +0100 Subject: [PATCH 2/2] refactor: Suggested refactor changes implemented --- .../shared/movement/ExtraMovementLogic.java | 74 ++++++++++--------- 1 file changed, 41 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/deeme/shared/movement/ExtraMovementLogic.java b/src/main/java/com/deeme/shared/movement/ExtraMovementLogic.java index 05b1f717..7a3f3558 100644 --- a/src/main/java/com/deeme/shared/movement/ExtraMovementLogic.java +++ b/src/main/java/com/deeme/shared/movement/ExtraMovementLogic.java @@ -52,52 +52,60 @@ private void move() { MovementModeEnum movementSelected = getMovementMode(); switch (movementSelected) { - case VSSAFETY: - if (!safetyFinder.tick()) { - break; - } case VS: vsMove(); break; case RANDOM: - if (!movement.isMoving() || movement.isOutOfMap()) { - movement.moveRandom(); - } + handleRandom(); break; case GROUPVSSAFETY: - if (safetyFinder.tick()) { - GroupMember groupMember = getClosestMember(); - if (groupMember != null) { - if (groupMember.getLocation().distanceTo(hero) < DISTANCE_TO_USE_VS_MODE) { - vsMove(); - } else { - movement.moveTo(groupMember.getLocation()); - } - } else { - vsMove(); - } - } + handleGroupVSSafety(); break; case GROUPVS: - GroupMember groupMember = getClosestMember(); - if (groupMember != null) { - if (groupMember.getLocation().distanceTo(hero) < DISTANCE_TO_USE_VS_MODE) { - vsMove(); - } else { - movement.moveTo(groupMember.getLocation()); - } - } else { - vsMove(); - } + handleGroupVS(); break; + case VSSAFETY: default: - if (safetyFinder.tick()) { - vsMove(); - } + handleVSSafety(); break; } } + private void handleVSSafety() { + if (!safetyFinder.tick()) { + vsMove(); + } + } + + private void handleRandom() { + if (!movement.isMoving() || movement.isOutOfMap()) { + movement.moveRandom(); + } + } + + private void handleGroupVSSafety() { + if (safetyFinder.tick()) { + handleGroupMovement(); + } + } + + private void handleGroupVS() { + handleGroupMovement(); + } + + private void handleGroupMovement() { + GroupMember groupMember = getClosestMember(); + if (groupMember != null) { + if (groupMember.getLocation().distanceTo(hero) < DISTANCE_TO_USE_VS_MODE) { + vsMove(); + } else { + movement.moveTo(groupMember.getLocation()); + } + } else { + vsMove(); + } + } + private MovementModeEnum getMovementMode() { if (checkCondition(config.movementCondtion1.condition)) { return config.movementCondtion1.movementMode; @@ -132,7 +140,7 @@ private Optional getDestination() { return Optional.of(target.getDestination().orElse(target.getLocationInfo().destinationInTime(500))); } else { Entity other = hero.getTarget(); - if (target != null && target.isValid()) { + if (other != null && other.isValid()) { return Optional.of(other.getLocationInfo()); } }