diff --git a/src/sections/RuneScapeGuideSection.java b/src/sections/RuneScapeGuideSection.java index e00664d..1ed01b6 100644 --- a/src/sections/RuneScapeGuideSection.java +++ b/src/sections/RuneScapeGuideSection.java @@ -10,23 +10,23 @@ import org.osbot.rs07.script.MethodProvider; import utils.CachedWidget; import utils.Sleep; +import utils.WidgetActionFilter; 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 nameAcceptedWidget = new CachedWidget(w -> w.getMessage().contains("Great!")); private final CachedWidget nameRejectedWidget = new CachedWidget(w -> w.getMessage().contains("Sorry")); + private final CachedWidget suggestedNameWidget = new CachedWidget(new WidgetActionFilter("Set name")); + 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 nameWindowWidget = 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?"); @@ -47,7 +47,7 @@ public final void onLoop() throws InterruptedException { case 0: case 1: case 2: - if (nameScreenDetectionWidget.get(getWidgets()).isPresent()) { + if (isNameScreenVisible()) { setDisplayName(); } else if (isCreationScreenVisible()) { createRandomCharacter(); @@ -87,28 +87,46 @@ private void setDisplayName() { if (nameAcceptedWidget.get(getWidgets()).isPresent()) { nameSetWidget.get(getWidgets()).ifPresent(rs2Widget -> { if (rs2Widget.interact()) { - Sleep.sleepUntil(() -> !nameScreenDetectionWidget.get(getWidgets()).isPresent(), 8000, 600); + Sleep.sleepUntil(() -> !nameWindowWidget.get(getWidgets()).isPresent(), 8000, 600); } }); + } else if (nameRejectedWidget.get(getWidgets()).isPresent()) { + + RS2Widget suggestedWidget = suggestedNameWidget.get(getWidgets()).get(); + + int rootID = suggestedWidget.getRootId(); + int secondLevelID = suggestedWidget.getSecondLevelId(); + RS2Widget nameWidget = getWidgets().get(rootID, secondLevelID + random(0, 2)); + + if (nameWidget.interact()) { + Sleep.sleepUntil(() -> nameAcceptedWidget.get(getWidgets()).isPresent(), 12000, 600); + + } + } else if (nameInputWidget.get(getWidgets()).isPresent() && nameInputWidget.get(getWidgets()).get().isVisible() - && getKeyboard().typeString(generateRandomString(7, 12), true)) { + && getKeyboard().typeString(generateRandomString(4), true)) { final int configValue = getConfigs().get(1042); - Sleep.sleepUntil(() -> getConfigs().get(1042) != configValue, 8000, 600); + // sending request sleep + Sleep.sleepUntil(() -> getConfigs().get(1042) != configValue, 12000, 600); + + //getting result sleep 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 min, int maxLength) { + private String generateRandomString(int maxLength) { String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789"; - return ThreadLocalRandom.current().ints(ThreadLocalRandom.current().nextInt(min, maxLength + 1), 0, chars.length()) + return new Random().ints(new Random().nextInt(maxLength) + 1, 0, chars.length()) .mapToObj(i -> "" + chars.charAt(i)) .collect(Collectors.joining()); } @@ -117,6 +135,10 @@ private boolean isCreationScreenVisible() { return creationScreenWidget.get(getWidgets()).filter(RS2Widget::isVisible).isPresent(); } + private boolean isNameScreenVisible() { + return nameWindowWidget.get(getWidgets()).isPresent(); + } + private void createRandomCharacter() throws InterruptedException { if (new Random().nextInt(2) == 1) { getWidgets().getWidgetContainingText("Female").interact();