Jump to content

Need help with time until break/ break duration paint.


killsmh

Recommended Posts

So I created custombreakmanager and is there a way to track the time until the break/break duration on my mining script's paint? I've provided my custombreak manager/miner script's paint.

package Breaks;

import org.osbot.rs07.script.RandomEvent;
import org.osbot.rs07.script.RandomSolver;

import java.util.Random;

public class CustomBreakManager extends RandomSolver {
private long breakStartTime = 0;
private long breakDuration = 0;
private long remainingBreakTime = 0;
private long nextLongBreakTime = System.currentTimeMillis() + longBreakInterval();
private long nextMediumBreakTime = System.currentTimeMillis() + mediumBreakInterval();
private long nextSmallBreakTime = System.currentTimeMillis() + smallBreakInterval();
private boolean isBreaking = false;
private BreakType activeBreak = BreakType.NONE; // Track the active break type
Random random = new Random();

private enum BreakType {
NONE, SMALL, MEDIUM, LONG
}

public CustomBreakManager() {
super(RandomEvent.BREAK_MANAGER);
}

@Override
public boolean shouldActivate() {
long timeUntilSmallBreak = nextSmallBreakTime - System.currentTimeMillis();
long timeUntilMediumBreak = nextMediumBreakTime - System.currentTimeMillis();
long timeUntilLongBreak = nextLongBreakTime - System.currentTimeMillis();

return (timeUntilSmallBreak <= 0 && activeBreak == BreakType.NONE)
|| (timeUntilMediumBreak <= 0 && activeBreak == BreakType.NONE)
|| (timeUntilLongBreak <= 0 && activeBreak == BreakType.NONE);
}

@Override
public int onLoop() throws InterruptedException {
if (isBreaking) {
return 100; // Continue normal loop execution during the break
}

long nextSmallBreak = nextSmallBreakTime - System.currentTimeMillis();
long nextMediumBreak = nextMediumBreakTime - System.currentTimeMillis();
long nextLongBreak = nextLongBreakTime - System.currentTimeMillis();

if (nextSmallBreak <= 0 && activeBreak == BreakType.NONE) {
activeBreak = BreakType.SMALL;
startSmallBreak();
} else if (nextMediumBreak <= 0 && activeBreak == BreakType.NONE) {
activeBreak = BreakType.MEDIUM;
startMediumBreak();
} else if (nextLongBreak <= 0 && activeBreak == BreakType.NONE) {
activeBreak = BreakType.LONG;
startLongBreak();
}
return 1000; // Return any suitable value here
}
private long longBreakInterval() {
return (long) ((10 * 60 * 60 * 1000) + (Math.random() * (4 * 60 * 60 * 1000)));
}
private void startLongBreak() throws InterruptedException {
long breakDurationLONG = (long) ((8 * 60 * 60 * 1000) + (Math.random() * (2 * 60 * 60 * 1000)));
isBreaking = true;

int randomChance = random.nextInt(100) + 1;

if (randomChance <= 35) {
getLogoutTab().logOut();
sleep(breakDurationLONG);
} else {
sleep(breakDurationLONG);
}

isBreaking = false;
activeBreak = BreakType.NONE;
nextLongBreakTime = System.currentTimeMillis() + longBreakInterval();
}

private long mediumBreakInterval() {
return (long) ((40 * 60 * 1000) + (Math.random() * (30 * 60 * 1000)));
}

private void startMediumBreak() throws InterruptedException {
long breakDurationMED = (long) ((100 * 60 * 1000) + (Math.random() * (50 * 60 * 1000)));
isBreaking = true;

int randomChance = random.nextInt(100) + 1;

if (randomChance <= 35) {
getLogoutTab().logOut();
sleep(breakDurationMED);
} else {
sleep(breakDurationMED);
}

isBreaking = false;
activeBreak = BreakType.NONE;
nextMediumBreakTime = System.currentTimeMillis() + mediumBreakInterval();
}

public long getNextBreakTime() {
if (activeBreak == BreakType.NONE) {
return Math.min(nextSmallBreakTime, Math.min(nextMediumBreakTime, nextLongBreakTime));
} else {
return -1; // No break scheduled when active break is in progress
}
}

private long smallBreakInterval() {
return (long) ((20 * 60 * 1000) + (Math.random() * (14 * 60 * 1000)));
}

private void startSmallBreak() throws InterruptedException {
long breakDuration = (long) ((6 * 60 * 1000) + (Math.random() * (5 * 60 * 1000)));
isBreaking = true;

int randomChance = random.nextInt(100) + 1;

if (randomChance <= 35) {
getLogoutTab().logOut();
sleep(breakDuration);
} else {
sleep(breakDuration);
}

isBreaking = false;
activeBreak = BreakType.NONE;
nextSmallBreakTime = System.currentTimeMillis() + smallBreakInterval();
}

}

MINER SCRIPT BELOW
 
@Override
public void onStart() {
startTime = System.currentTimeMillis();
getExperienceTracker().start(Skill.MINING);
// Initialize the customBreakManager instance
CustomBreakManager breaker = new CustomBreakManager();
breaker.exchangeContext(getBot());
bot.getRandomExecutor().overrideOSBotRandom(breaker);
}
 
@Override
public void onPaint(Graphics2D g) {
// Call super method to draw the default paint first
super.onPaint(g);

// Mouse X crosshair
Point mP = getMouse().getPosition();
g.setColor(Color.WHITE);
g.drawLine(mP.x - 5, mP.y + 5, mP.x + 5, mP.y - 5);
g.drawLine(mP.x + 5, mP.y + 5, mP.x - 5, mP.y - 5);

// Trails
while (!mousePath.isEmpty() && mousePath.peek().isUp())
mousePath.remove();
Point clientCursor = mouse.getPosition();
MousePathPoint mpp = new MousePathPoint(clientCursor.x, clientCursor.y, 500);
if (mousePath.isEmpty() || !mousePath.getLast().equals(mpp))
mousePath.add(mpp);
MousePathPoint lastPoint = null;
for (MousePathPoint a : mousePath) {
if (lastPoint != null) {
g.setColor(nextColor());
g.drawLine(a.x, a.y, lastPoint.x, lastPoint.y);
}
lastPoint = a;
}

// Get the runtime in milliseconds
long runtime = System.currentTimeMillis() - startTime;

// Format runtime as a string
String runtimeString = String.format("Runtime: %02d:%02d:%02d",
TimeUnit.MILLISECONDS.toHours(runtime),
TimeUnit.MILLISECONDS.toMinutes(runtime) % 60,
TimeUnit.MILLISECONDS.toSeconds(runtime) % 60);

// Set font and color for the runtime display
g.setFont(new Font("Arial", Font.PLAIN, 14));
g.setColor(Color.WHITE);

// Draw the background rectangle
Color bgColor = new Color(0, 0, 0, 140);
Color nick = new Color(0, 0, 0, 255);
int rectX = 6;
int rectY = 345;
int rectWidth = g.getFontMetrics().stringWidth(runtimeString) + 395;
int rectHeight = g.getFontMetrics().getHeight() + 117;
g.setColor(bgColor);
g.fillRect(rectX, rectY, rectWidth, rectHeight);
g.setColor(nick);
g.fillRect(rectX, rectY + rectHeight + 18, rectWidth, g.getFontMetrics().getHeight() + 3);

// Draw the runtime string on top of the background
g.setColor(Color.WHITE);
g.drawString(runtimeString, rectX + 4, rectY + 15);

// Percentages
double miningPercent = percentToNextLevel(Skill.MINING);
g.drawString(getTimeToLevel(), rectX + 344, rectY + 65);
g.drawString("Mining Level: " + getCurrentMiningLevel(), rectX + 404, rectY + 85);
g.drawString("Mining: " + miningPercent + "%", rectX + 421, rectY + 105);

// Retrieve the remaining time until the next break
long timeUntilBreak = customBreakManager.getNextBreakTime() - System.currentTimeMillis();

// Format the time until the next break as a string
String breakTimeString = String.format("Next Break: %02d:%02d:%02d",
TimeUnit.MILLISECONDS.toHours(timeUntilBreak),
TimeUnit.MILLISECONDS.toMinutes(timeUntilBreak) % 60,
TimeUnit.MILLISECONDS.toSeconds(timeUntilBreak) % 60);

// Set font and color for the break time display
g.setFont(new Font("Arial", Font.PLAIN, 14));
g.setColor(Color.WHITE);

// Draw the break time string on top of the background
g.drawString(breakTimeString, rectX + 4, rectY + 35);

}
Edited by killsmh
  • Like 1
Link to comment
Share on other sites

Possible solution:

Add a getter in your CustomBreakManager to calculate time left as you did in shouldActivate()

public long getTimeLeft(){
	//Logic here
}


In your main script extract the breakmanager variable:

CustomBreakManager breaker;

@Override
public void onStart() {
startTime = System.currentTimeMillis();
getExperienceTracker().start(Skill.MINING);
// Initialize the customBreakManager instance
breaker = new CustomBreakManager();
breaker.exchangeContext(getBot());
bot.getRandomExecutor().overrideOSBotRandom(breaker);
}


Add in your paint:

if(breaker != null){
long timeLeft = breaker.getTimeLeft();
//print it out
}


EDIT:
I see you already did something similar, but I believe you are using the wrong breakmanager variable?
Where does the customBreakManager variable comes from so suddenly?

This line -> long timeUntilBreak = customBreakManager.getNextBreakTime() - System.currentTimeMillis();

Edited by Khaleesi
  • Like 1
  • Heart 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...