1010import org .osbot .rs07 .script .MethodProvider ;
1111import utils .CachedWidget ;
1212import utils .Sleep ;
13- import utils .WidgetActionFilter ;
1413
15- import javax .swing .*;
1614import java .util .Arrays ;
1715import java .util .Collections ;
1816import java .util .Random ;
17+ import java .util .concurrent .ThreadLocalRandom ;
1918import java .util .stream .Collectors ;
2019
2120public final class RuneScapeGuideSection extends TutorialSection {
2221
23- private final CachedWidget nameLookupWidget = new CachedWidget (new WidgetActionFilter ("Look up name" ));
24- private final CachedWidget checkNameWidget = new CachedWidget (w -> w .getMessage ().contains ("What name would you like to check" ));
25- private final CachedWidget suggestedNameWidget = new CachedWidget ("suggestions" );
26- private final CachedWidget setNameWidget = new CachedWidget ("Set name" );
22+
23+ private final CachedWidget nameAcceptedWidget = new CachedWidget (w -> w .getMessage ().contains ("Great!" ));
24+ private final CachedWidget nameRejectedWidget = new CachedWidget (w -> w .getMessage ().contains ("Sorry" ));
25+
26+ private final CachedWidget nameLookupWidget = new CachedWidget (w -> w .getMessage ().contains ("Look up name" ));
27+ private final CachedWidget nameInputWidget = new CachedWidget (w -> w .getMessage ().contains ("What name would you like to check" ));
28+ private final CachedWidget nameSetWidget = new CachedWidget ("Set name" );
29+ private final CachedWidget nameScreenDetectionWidget = new CachedWidget ("Choose display name" );
30+
2731 private final CachedWidget creationScreenWidget = new CachedWidget ("Head" );
2832 private final CachedWidget experienceWidget = new CachedWidget ("What's your experience with Old School Runescape?" );
2933 private boolean isAudioDisabled ;
@@ -43,7 +47,7 @@ public final void onLoop() throws InterruptedException {
4347 case 0 :
4448 case 1 :
4549 case 2 :
46- if (getConfigs (). get ( 1042 ) != 21 ) {
50+ if (nameScreenDetectionWidget . get ( getWidgets ()). isPresent () ) {
4751 setDisplayName ();
4852 } else if (isCreationScreenVisible ()) {
4953 createRandomCharacter ();
@@ -80,56 +84,40 @@ public final void onLoop() throws InterruptedException {
8084 }
8185
8286 private void setDisplayName () {
83- int configID = 1042 ;
84- int configValue = getConfigs ().get (configID );
85-
86- switch (configValue ) {
87- case 0 :
88- case 1 :
89- if (suggestedNameWidget .get (getWidgets ()).isPresent ()) {
90- RS2Widget suggestedWidget = suggestedNameWidget .get (getWidgets ()).get ();
91- int rootID = suggestedWidget .getRootId ();
92- int secondLevelID = suggestedWidget .getSecondLevelId ();
93- RS2Widget nameWidget = getWidgets ().get (rootID , secondLevelID + 2 + random (0 , 2 ));
94- if (nameWidget .interact ()) {
95- Sleep .sleepUntil (() -> getConfigs ().get (configID ) == 4 , 1200 );
96- }
97- } else if (checkNameWidget .get (getWidgets ()).filter (RS2Widget ::isVisible ).isPresent ()) {
98- if (getKeyboard ().typeString (generateRandomString (4 ))) {
99- Sleep .sleepUntil (() -> getConfigs ().get (configID ) == 2 , 1200 );
100- }
101- } else if (nameLookupWidget .get (getWidgets ()).get ().interact ("Look up name" )) {
102- Sleep .sleepUntil (() -> getConfigs ().get (configID ) == 1 , 1200 );
103- }
104- break ;
105- case 4 :
106- if (setNameWidget .get (getWidgets ()).isPresent ()) {
107- if (setNameWidget .get (getWidgets ()).get ().interact ()) {
108- Sleep .sleepUntil (() -> getConfigs ().get (configID ) == 21 , 2400 );
109- }
87+ if (nameAcceptedWidget .get (getWidgets ()).isPresent ()) {
88+ nameSetWidget .get (getWidgets ()).ifPresent (rs2Widget -> {
89+ if (rs2Widget .interact ()) {
90+ Sleep .sleepUntil (() -> !nameScreenDetectionWidget .get (getWidgets ()).isPresent (), 8000 , 600 );
11091 }
111- default :
112- Sleep .sleepUntil (() -> getConfigs ().get (configID ) != configValue , 1200 );
92+ });
93+ } else if (nameInputWidget .get (getWidgets ()).isPresent ()
94+ && nameInputWidget .get (getWidgets ()).get ().isVisible ()
95+ && getKeyboard ().typeString (generateRandomString (7 , 12 ), true )) {
96+
97+ final int configValue = getConfigs ().get (1042 );
98+
99+ Sleep .sleepUntil (() -> getConfigs ().get (1042 ) != configValue , 8000 , 600 );
100+ Sleep .sleepUntil (() -> getConfigs ().get (1042 ) == configValue || nameAcceptedWidget .get (getWidgets ()).isPresent (), 8000 , 600 );
101+ } else if (nameLookupWidget .get (getWidgets ()).isPresent ()
102+ && nameLookupWidget .get (getWidgets ()).get ().interact ()) {
103+ Sleep .sleepUntil (() -> nameInputWidget .get (getWidgets ()).isPresent () && nameInputWidget .get (getWidgets ()).get ().isVisible (), 8000 , 600 );
113104 }
114105 }
115106
116- private String generateRandomString (int maxLength ) {
107+ private String generateRandomString (int min , int maxLength ) {
117108 String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
118- + "abcdefghijklmnopqrstuvwxyz"
119- + "0123456789" ;
120- return new Random ().ints (new Random ().nextInt (maxLength ) + 1 , 0 , chars .length ())
121- .mapToObj (i -> "" + chars .charAt (i ))
122- .collect (Collectors .joining ());
109+ + "abcdefghijklmnopqrstuvwxyz"
110+ + "0123456789" ;
111+ return ThreadLocalRandom . current ().ints (ThreadLocalRandom . current ().nextInt (min , maxLength + 1 ) , 0 , chars .length ())
112+ .mapToObj (i -> "" + chars .charAt (i ))
113+ .collect (Collectors .joining ());
123114 }
124115
125116 private boolean isCreationScreenVisible () {
126117 return creationScreenWidget .get (getWidgets ()).filter (RS2Widget ::isVisible ).isPresent ();
127118 }
128119
129120 private void createRandomCharacter () throws InterruptedException {
130- // letting all the widgets show up
131- sleep (2000 );
132-
133121 if (new Random ().nextInt (2 ) == 1 ) {
134122 getWidgets ().getWidgetContainingText ("Female" ).interact ();
135123 }
0 commit comments