diff --git a/src/sections/RuneScapeGuideSection.java b/src/sections/RuneScapeGuideSection.java index 0d7f858..e00664d 100644 --- a/src/sections/RuneScapeGuideSection.java +++ b/src/sections/RuneScapeGuideSection.java @@ -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; @@ -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(); @@ -80,46 +84,33 @@ 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() { @@ -127,9 +118,6 @@ private boolean isCreationScreenVisible() { } private void createRandomCharacter() throws InterruptedException { - // letting all the widgets show up - sleep(2000); - if (new Random().nextInt(2) == 1) { getWidgets().getWidgetContainingText("Female").interact(); }