1010import org .osbot .rs07 .script .MethodProvider ;
1111import utils .CachedWidget ;
1212import utils .Sleep ;
13+ import utils .WidgetActionFilter ;
1314
1415import java .util .Arrays ;
1516import java .util .Collections ;
1617import java .util .Random ;
17- import java .util .concurrent .ThreadLocalRandom ;
1818import java .util .stream .Collectors ;
1919
2020public final class RuneScapeGuideSection extends TutorialSection {
21-
22-
2321 private final CachedWidget nameAcceptedWidget = new CachedWidget (w -> w .getMessage ().contains ("Great!" ));
2422 private final CachedWidget nameRejectedWidget = new CachedWidget (w -> w .getMessage ().contains ("Sorry" ));
2523
24+ private final CachedWidget suggestedNameWidget = new CachedWidget (new WidgetActionFilter ("Set name" ));
25+
2626 private final CachedWidget nameLookupWidget = new CachedWidget (w -> w .getMessage ().contains ("Look up name" ));
2727 private final CachedWidget nameInputWidget = new CachedWidget (w -> w .getMessage ().contains ("What name would you like to check" ));
2828 private final CachedWidget nameSetWidget = new CachedWidget ("Set name" );
29- private final CachedWidget nameScreenDetectionWidget = new CachedWidget ("Choose display name" );
29+ private final CachedWidget nameWindowWidget = new CachedWidget ("Choose display name" );
3030
3131 private final CachedWidget creationScreenWidget = new CachedWidget ("Head" );
3232 private final CachedWidget experienceWidget = new CachedWidget ("What's your experience with Old School Runescape?" );
@@ -47,7 +47,7 @@ public final void onLoop() throws InterruptedException {
4747 case 0 :
4848 case 1 :
4949 case 2 :
50- if (nameScreenDetectionWidget . get ( getWidgets ()). isPresent ()) {
50+ if (isNameScreenVisible ()) {
5151 setDisplayName ();
5252 } else if (isCreationScreenVisible ()) {
5353 createRandomCharacter ();
@@ -87,28 +87,46 @@ private void setDisplayName() {
8787 if (nameAcceptedWidget .get (getWidgets ()).isPresent ()) {
8888 nameSetWidget .get (getWidgets ()).ifPresent (rs2Widget -> {
8989 if (rs2Widget .interact ()) {
90- Sleep .sleepUntil (() -> !nameScreenDetectionWidget .get (getWidgets ()).isPresent (), 8000 , 600 );
90+ Sleep .sleepUntil (() -> !nameWindowWidget .get (getWidgets ()).isPresent (), 8000 , 600 );
9191 }
9292 });
93+ } else if (nameRejectedWidget .get (getWidgets ()).isPresent ()) {
94+
95+ RS2Widget suggestedWidget = suggestedNameWidget .get (getWidgets ()).get ();
96+
97+ int rootID = suggestedWidget .getRootId ();
98+ int secondLevelID = suggestedWidget .getSecondLevelId ();
99+ RS2Widget nameWidget = getWidgets ().get (rootID , secondLevelID + random (0 , 2 ));
100+
101+ if (nameWidget .interact ()) {
102+ Sleep .sleepUntil (() -> nameAcceptedWidget .get (getWidgets ()).isPresent (), 12000 , 600 );
103+
104+ }
105+
93106 } else if (nameInputWidget .get (getWidgets ()).isPresent ()
94107 && nameInputWidget .get (getWidgets ()).get ().isVisible ()
95- && getKeyboard ().typeString (generateRandomString (7 , 12 ), true )) {
108+ && getKeyboard ().typeString (generateRandomString (4 ), true )) {
96109
97110 final int configValue = getConfigs ().get (1042 );
98111
99- Sleep .sleepUntil (() -> getConfigs ().get (1042 ) != configValue , 8000 , 600 );
112+ // sending request sleep
113+ Sleep .sleepUntil (() -> getConfigs ().get (1042 ) != configValue , 12000 , 600 );
114+
115+ //getting result sleep
100116 Sleep .sleepUntil (() -> getConfigs ().get (1042 ) == configValue || nameAcceptedWidget .get (getWidgets ()).isPresent (), 8000 , 600 );
117+
101118 } else if (nameLookupWidget .get (getWidgets ()).isPresent ()
102119 && nameLookupWidget .get (getWidgets ()).get ().interact ()) {
103120 Sleep .sleepUntil (() -> nameInputWidget .get (getWidgets ()).isPresent () && nameInputWidget .get (getWidgets ()).get ().isVisible (), 8000 , 600 );
104121 }
122+
105123 }
106124
107- private String generateRandomString (int min , int maxLength ) {
125+ private String generateRandomString (int maxLength ) {
108126 String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
109127 + "abcdefghijklmnopqrstuvwxyz"
110128 + "0123456789" ;
111- return ThreadLocalRandom . current ().ints (ThreadLocalRandom . current ().nextInt (min , maxLength + 1 ) , 0 , chars .length ())
129+ return new Random ().ints (new Random ().nextInt (maxLength ) + 1 , 0 , chars .length ())
112130 .mapToObj (i -> "" + chars .charAt (i ))
113131 .collect (Collectors .joining ());
114132 }
@@ -117,6 +135,10 @@ private boolean isCreationScreenVisible() {
117135 return creationScreenWidget .get (getWidgets ()).filter (RS2Widget ::isVisible ).isPresent ();
118136 }
119137
138+ private boolean isNameScreenVisible () {
139+ return nameWindowWidget .get (getWidgets ()).isPresent ();
140+ }
141+
120142 private void createRandomCharacter () throws InterruptedException {
121143 if (new Random ().nextInt (2 ) == 1 ) {
122144 getWidgets ().getWidgetContainingText ("Female" ).interact ();
0 commit comments