Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ project.build.group=net.runelite
project.build.version=1.12.10

glslang.path=
microbot.version=2.1.2
microbot.version=2.1.3
microbot.commit.sha=nogit
microbot.repo.url=http://138.201.81.246:8081/repository/microbot-snapshot/
microbot.repo.username=
Expand Down
7 changes: 1 addition & 6 deletions runelite-client/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,6 @@ plugins {
id("net.runelite.runelite-gradle-plugin.index")
id("net.runelite.runelite-gradle-plugin.jarsign")

// application // <-- add this
}

/*application {
mainClass.set("net.runelite.client.RuneLite")
}

tasks.register<JavaExec>("runDebug") {
Expand All @@ -70,7 +65,7 @@ tasks.register<JavaExec>("runDebug") {
// JDWP agent for debugger
"-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"
)
}*/
}

lombok.version = libs.versions.lombok.get()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -506,95 +506,143 @@ private void detectUnexpectedLogout() {
/**
* Select world based on configuration and profile
*/
private int selectWorld() {
boolean membersOnly = config.respectMemberStatus() &&
activeProfile != null &&
activeProfile.isMember();

WorldRegion region = config.regionPreference().getWorldRegion();

int targetWorld = -1;

switch (config.worldSelectionMode()) {
case CURRENT_PREFERRED_WORLD:
targetWorld = preBreakWorld != -1 ? preBreakWorld :
Rs2WorldUtil.getRandomAccessibleWorldFromRegion(
region,
config.avoidEmptyWorlds(),
config.avoidOvercrowdedWorlds(),
membersOnly
);
break;

case RANDOM_WORLD:
targetWorld = Rs2WorldUtil.getRandomAccessibleWorld(
config.avoidEmptyWorlds(),
config.avoidOvercrowdedWorlds(),
membersOnly
);
break;

case REGIONAL_RANDOM:
targetWorld = Rs2WorldUtil.getRandomAccessibleWorldFromRegion(
region,
config.avoidEmptyWorlds(),
config.avoidOvercrowdedWorlds(),
membersOnly
);
break;

case BEST_POPULATION:
targetWorld = Rs2WorldUtil.getBestAccessibleWorldForLogin(
false, // by population, not ping
region,
config.avoidEmptyWorlds(),
config.avoidOvercrowdedWorlds(),
membersOnly
);
break;

case BEST_PING:
targetWorld = Rs2WorldUtil.getBestAccessibleWorldForLogin(
true, // by ping
region,
config.avoidEmptyWorlds(),
config.avoidOvercrowdedWorlds(),
membersOnly
);
break;
}

log.info("[BreakHandlerV2] Selected world: {} (mode: {}, members: {})",
targetWorld, config.worldSelectionMode(), membersOnly);

return targetWorld;
}

/**
* Schedule the next break
*/
private void scheduleNextBreak() {
int minMinutes = config.minPlaytime();
int maxMinutes = config.maxPlaytime();

int playtimeMinutes = Rs2Random.between(minMinutes, maxMinutes);
nextBreakTime = Instant.now().plus(playtimeMinutes, ChronoUnit.MINUTES);

log.info("[BreakHandlerV2] Next break in {} minutes", playtimeMinutes);
}

/**
* Calculate break duration
*/
private long calculateBreakDuration() {
int minMinutes = config.minBreakDuration();
int maxMinutes = config.maxBreakDuration();

int breakMinutes = Rs2Random.between(minMinutes, maxMinutes);
log.info("[BreakHandlerV2] Break duration: {} minutes", breakMinutes);

return breakMinutes * 60000L; // Convert to milliseconds
}
private int selectWorld() {
boolean membersOnly = config.respectMemberStatus() &&
activeProfile != null &&
activeProfile.isMember();

WorldRegion region = config.regionPreference().getWorldRegion();
Integer preferredWorld = resolveProfilePreferredWorld(region);

int targetWorld = -1;

switch (config.worldSelectionMode()) {
case CURRENT_PREFERRED_WORLD:
if (preferredWorld != null) {
targetWorld = preferredWorld;
break;
}

if (preBreakWorld != -1 && Rs2WorldUtil.canAccessWorld(preBreakWorld)) {
targetWorld = preBreakWorld;
break;
}

targetWorld = Rs2WorldUtil.getRandomAccessibleWorldFromRegion(
region,
config.avoidEmptyWorlds(),
config.avoidOvercrowdedWorlds(),
membersOnly
);
break;

case RANDOM_WORLD:
targetWorld = Rs2WorldUtil.getRandomAccessibleWorld(
config.avoidEmptyWorlds(),
config.avoidOvercrowdedWorlds(),
membersOnly
);
break;

case REGIONAL_RANDOM:
targetWorld = Rs2WorldUtil.getRandomAccessibleWorldFromRegion(
region,
config.avoidEmptyWorlds(),
config.avoidOvercrowdedWorlds(),
membersOnly
);
break;

case BEST_POPULATION:
targetWorld = Rs2WorldUtil.getBestAccessibleWorldForLogin(
false, // by population, not ping
region,
config.avoidEmptyWorlds(),
config.avoidOvercrowdedWorlds(),
membersOnly
);
break;

case BEST_PING:
targetWorld = Rs2WorldUtil.getBestAccessibleWorldForLogin(
true, // by ping
region,
config.avoidEmptyWorlds(),
config.avoidOvercrowdedWorlds(),
membersOnly
);
break;
}

log.info("[BreakHandlerV2] Selected world: {} (mode: {}, members: {})",
targetWorld, config.worldSelectionMode(), membersOnly);

return targetWorld;
}

private Integer resolveProfilePreferredWorld(WorldRegion region) {
if (activeProfile == null || activeProfile.getSelectedWorld() == null) {
return null;
}

int selectedWorld = activeProfile.getSelectedWorld();

// -1 = random members world, -2 = random F2P world
if (selectedWorld == -1) {
if (!config.respectMemberStatus() || activeProfile.isMember()) {
return Rs2WorldUtil.getRandomAccessibleWorldFromRegion(
region,
config.avoidEmptyWorlds(),
config.avoidOvercrowdedWorlds(),
true
);
}
log.warn("[BreakHandlerV2] Profile requests random members world but account is F2P");
return null;
}

if (selectedWorld == -2) {
return Rs2WorldUtil.getRandomAccessibleWorldFromRegion(
region,
config.avoidEmptyWorlds(),
config.avoidOvercrowdedWorlds(),
false
);
}

if (!Rs2WorldUtil.canAccessWorld(selectedWorld)) {
log.warn("[BreakHandlerV2] Profile preferred world {} is not accessible, falling back", selectedWorld);
return null;
}

return selectedWorld;
}

/**
* Schedule the next break
*/
private void scheduleNextBreak() {
int minMinutes = config.minPlaytime();
int maxMinutes = config.maxPlaytime();

int playtimeMinutes = Rs2Random.between(minMinutes, maxMinutes);
nextBreakTime = Instant.now().plus(playtimeMinutes, ChronoUnit.MINUTES);

log.info("[BreakHandlerV2] Next break in {} minutes", playtimeMinutes);
}

/**
* Calculate break duration
*/
private long calculateBreakDuration() {
int minMinutes = config.minBreakDuration();
int maxMinutes = config.maxBreakDuration();

int breakMinutes = Rs2Random.between(minMinutes, maxMinutes);
log.info("[BreakHandlerV2] Break duration: {} minutes", breakMinutes);

return breakMinutes * 60000L; // Convert to milliseconds
}

/**
* Transition to a new state
Expand Down