diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/accountselector/AutoLoginConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/accountselector/AutoLoginConfig.java index 39be1fa0b63..2c09eee9778 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/accountselector/AutoLoginConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/accountselector/AutoLoginConfig.java @@ -27,18 +27,63 @@ public interface AutoLoginConfig extends Config { @ConfigItem( keyName = "Is Member", name = "Is Member", - description = "use Member worlds", - position = 0, + description = "Use member worlds", + position = 1, section = generalSection ) default boolean isMember() { return false; } @ConfigItem( keyName = "RandomWorld", - name = "RandomWorld", - description = "use random worlds", - position = 0, + name = "Use Random World", + description = "Use random worlds", + position = 2, section = generalSection ) default boolean useRandomWorld() { return true; } + + @ConfigSection( + name = "Region Filter", + description = "Filter random world selection by region", + position = 10, + closedByDefault = false + ) + String regionSection = "region"; + + + @ConfigItem( + keyName = "AllowUK", + name = "UK", + description = "Allow UK worlds", + position = 1, + section = regionSection + ) + default boolean allowUK() { return true; } + + @ConfigItem( + keyName = "AllowUS", + name = "US", + description = "Allow US worlds", + position = 2, + section = regionSection + ) + default boolean allowUS() { return true; } + + @ConfigItem( + keyName = "AllowGermany", + name = "Germany", + description = "Allow German worlds", + position = 3, + section = regionSection + ) + default boolean allowGermany() { return true; } + + @ConfigItem( + keyName = "AllowAustralia", + name = "Australia", + description = "Allow Australian worlds", + position = 4, + section = regionSection + ) + default boolean allowAustralia() { return true; } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/accountselector/AutoLoginScript.java b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/accountselector/AutoLoginScript.java index f9bf10613db..156423ffc83 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/microbot/accountselector/AutoLoginScript.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/microbot/accountselector/AutoLoginScript.java @@ -3,21 +3,65 @@ import net.runelite.api.GameState; import net.runelite.client.plugins.microbot.Microbot; import net.runelite.client.plugins.microbot.Script; +import net.runelite.client.plugins.microbot.breakhandler.BreakHandlerScript; import net.runelite.client.plugins.microbot.util.security.Login; +import net.runelite.http.api.worlds.WorldRegion; +import org.slf4j.event.Level; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; import java.util.concurrent.TimeUnit; public class AutoLoginScript extends Script { + private List getAllowedRegions(AutoLoginConfig config) { + List allowedRegions = new ArrayList<>(); + + if (config.allowUK()) { + allowedRegions.add(WorldRegion.UNITED_KINGDOM); + } + if (config.allowUS()) { + allowedRegions.add(WorldRegion.UNITED_STATES_OF_AMERICA); + } + if (config.allowGermany()) { + allowedRegions.add(WorldRegion.GERMANY); + } + if (config.allowAustralia()) { + allowedRegions.add(WorldRegion.AUSTRALIA); + } + + return allowedRegions; + } + + private int getRandomWorldWithRegionFilter(AutoLoginConfig config) { + List allowedRegions = getAllowedRegions(config); + + if (allowedRegions.isEmpty()) { + // If no regions allowed, use default method + return Login.getRandomWorld(config.isMember()); + } + + // Pick a random region from allowed regions + Random random = new Random(); + WorldRegion selectedRegion = allowedRegions.get(random.nextInt(allowedRegions.size())); + + return Login.getRandomWorld(config.isMember(), selectedRegion); + } + public boolean run(AutoLoginConfig autoLoginConfig) { mainScheduledFuture = scheduledExecutorService.scheduleWithFixedDelay(() -> { try { if (!super.run()) return; + if (BreakHandlerScript.isBreakActive() || BreakHandlerScript.isMicroBreakActive()) return; if (Microbot.getClient().getGameState() == GameState.LOGIN_SCREEN) { if (autoLoginConfig.useRandomWorld()) { - new Login(Login.getRandomWorld(autoLoginConfig.isMember())); + final int world = getRandomWorldWithRegionFilter(autoLoginConfig); + Microbot.log(Level.INFO, String.format("Auto-logging into random %s world: %d", autoLoginConfig.isMember() ? "member" : "free", world)); + new Login(world); } else { + Microbot.log(Level.INFO, String.format("Auto-logging into world: %d", autoLoginConfig.world())); new Login(autoLoginConfig.world()); } sleep(5000);