Skip to content
This repository was archived by the owner on Feb 9, 2022. It is now read-only.
Merged
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
78 changes: 33 additions & 45 deletions src/sections/RuneScapeGuideSection.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,24 @@
import org.osbot.rs07.script.MethodProvider;
import utils.CachedWidget;
import utils.Sleep;
import utils.WidgetActionFilter;

import javax.swing.*;
import java.util.Arrays;
import java.util.Collections;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.Collectors;

public final class RuneScapeGuideSection extends TutorialSection {

private final CachedWidget nameLookupWidget = new CachedWidget(new WidgetActionFilter("Look up name"));
private final CachedWidget checkNameWidget = new CachedWidget(w -> w.getMessage().contains("What name would you like to check"));
private final CachedWidget suggestedNameWidget = new CachedWidget("suggestions");
private final CachedWidget setNameWidget = new CachedWidget("Set name");

private final CachedWidget nameAcceptedWidget = new CachedWidget(w -> w.getMessage().contains("Great!"));
private final CachedWidget nameRejectedWidget = new CachedWidget(w -> w.getMessage().contains("Sorry"));

private final CachedWidget nameLookupWidget = new CachedWidget(w -> w.getMessage().contains("Look up name"));
private final CachedWidget nameInputWidget = new CachedWidget(w -> w.getMessage().contains("What name would you like to check"));
private final CachedWidget nameSetWidget = new CachedWidget("Set name");
private final CachedWidget nameScreenDetectionWidget = new CachedWidget("Choose display name");

private final CachedWidget creationScreenWidget = new CachedWidget("Head");
private final CachedWidget experienceWidget = new CachedWidget("What's your experience with Old School Runescape?");
private boolean isAudioDisabled;
Expand All @@ -43,7 +47,7 @@ public final void onLoop() throws InterruptedException {
case 0:
case 1:
case 2:
if (getConfigs().get(1042) != 21) {
if (nameScreenDetectionWidget.get(getWidgets()).isPresent()) {
setDisplayName();
} else if (isCreationScreenVisible()) {
createRandomCharacter();
Expand Down Expand Up @@ -80,56 +84,40 @@ public final void onLoop() throws InterruptedException {
}

private void setDisplayName() {
int configID = 1042;
int configValue = getConfigs().get(configID);

switch (configValue) {
case 0:
case 1:
if (suggestedNameWidget.get(getWidgets()).isPresent()) {
RS2Widget suggestedWidget = suggestedNameWidget.get(getWidgets()).get();
int rootID = suggestedWidget.getRootId();
int secondLevelID = suggestedWidget.getSecondLevelId();
RS2Widget nameWidget = getWidgets().get(rootID, secondLevelID + 2 + random(0, 2));
if (nameWidget.interact()) {
Sleep.sleepUntil(() -> getConfigs().get(configID) == 4, 1200);
}
} else if (checkNameWidget.get(getWidgets()).filter(RS2Widget::isVisible).isPresent()) {
if (getKeyboard().typeString(generateRandomString(4))) {
Sleep.sleepUntil(() -> getConfigs().get(configID) == 2, 1200);
}
} else if (nameLookupWidget.get(getWidgets()).get().interact("Look up name")) {
Sleep.sleepUntil(() -> getConfigs().get(configID) == 1, 1200);
}
break;
case 4:
if (setNameWidget.get(getWidgets()).isPresent()) {
if (setNameWidget.get(getWidgets()).get().interact()) {
Sleep.sleepUntil(() -> getConfigs().get(configID) == 21, 2400);
}
if (nameAcceptedWidget.get(getWidgets()).isPresent()) {
nameSetWidget.get(getWidgets()).ifPresent(rs2Widget -> {
if (rs2Widget.interact()) {
Sleep.sleepUntil(() -> !nameScreenDetectionWidget.get(getWidgets()).isPresent(), 8000, 600);
}
default:
Sleep.sleepUntil(() -> getConfigs().get(configID) != configValue, 1200);
});
} else if (nameInputWidget.get(getWidgets()).isPresent()
&& nameInputWidget.get(getWidgets()).get().isVisible()
&& getKeyboard().typeString(generateRandomString(7, 12), true)) {

final int configValue = getConfigs().get(1042);

Sleep.sleepUntil(() -> getConfigs().get(1042) != configValue, 8000, 600);
Sleep.sleepUntil(() -> getConfigs().get(1042) == configValue || nameAcceptedWidget.get(getWidgets()).isPresent(), 8000, 600);
} else if (nameLookupWidget.get(getWidgets()).isPresent()
&& nameLookupWidget.get(getWidgets()).get().interact()) {
Sleep.sleepUntil(() -> nameInputWidget.get(getWidgets()).isPresent() && nameInputWidget.get(getWidgets()).get().isVisible(), 8000, 600);
}
}

private String generateRandomString(int maxLength) {
private String generateRandomString(int min, int maxLength) {
String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "abcdefghijklmnopqrstuvwxyz"
+ "0123456789";
return new Random().ints(new Random().nextInt(maxLength) + 1, 0, chars.length())
.mapToObj(i -> "" + chars.charAt(i))
.collect(Collectors.joining());
+ "abcdefghijklmnopqrstuvwxyz"
+ "0123456789";
return ThreadLocalRandom.current().ints(ThreadLocalRandom.current().nextInt(min, maxLength + 1), 0, chars.length())
.mapToObj(i -> "" + chars.charAt(i))
.collect(Collectors.joining());
}

private boolean isCreationScreenVisible() {
return creationScreenWidget.get(getWidgets()).filter(RS2Widget::isVisible).isPresent();
}

private void createRandomCharacter() throws InterruptedException {
// letting all the widgets show up
sleep(2000);

if (new Random().nextInt(2) == 1) {
getWidgets().getWidgetContainingText("Female").interact();
}
Expand Down