ColtMeister Posted November 4, 2015 Share Posted November 4, 2015 Hello, I have just started using the osbot API, just testing things out on my runescape account. I have an okay amount of coding experience, so feel free to answer this question as technically as you want to. Let's say that, for instance, in my code, I talk to a butler and because of that, my state has changed to "States.TALKING_TO_BUTLER" (I know that using states is not the most efficient way to program bots, I am just doing it so I can get familiar with the API). While I am in dialogue with the butler, I expect to press continue once, and then I want to select "Go to bank...". Here is my issue: Once I have invoked dialogues.clickContinue(), there is a delay in the game before dialogues.selectOption("Yes") will work. So, if I have the two lines of code next to each other: dialogues.clickContinue(); dialogues.selectOption("Yes"); The "yes" option is never selected because it is invoked before it is actually visible in game. The only way I have found to fix this problem so far is to use the sleep function in-between the invocations, but I think this is inefficient since the waiting period is dependent upon my in-game latency. Quote Link to comment Share on other sites More sharing options...
Precise Posted November 4, 2015 Share Posted November 4, 2015 (edited) Hello, I have just started using the osbot API, just testing things out on my runescape account. I have an okay amount of coding experience, so feel free to answer this question as technically as you want to. Let's say that, for instance, in my code, I talk to a butler and because of that, my state has changed to "States.TALKING_TO_BUTLER" (I know that using states is not the most efficient way to program bots, I am just doing it so I can get familiar with the API). While I am in dialogue with the butler, I expect to press continue once, and then I want to select "Go to bank...". Here is my issue: Once I have invoked dialogues.clickContinue(), there is a delay in the game before dialogues.selectOption("Yes") will work. So, if I have the two lines of code next to each other: dialogues.clickContinue(); dialogues.selectOption("Yes"); The "yes" option is never selected because it is invoked before it is actually visible in game. The only way I have found to fix this problem so far is to use the sleep function in-between the invocations, but I think this is inefficient since the waiting period is dependent upon my in-game latency. add some if and else if statements calling the these to determine which one to call etc: http://osbot.org/api/org/osbot/rs07/api/Dialogues.html#isPendingContinuation-- http://osbot.org/api/org/osbot/rs07/api/Dialogues.html#isPendingOption-- for example: if(this.getDialogues().isPendingContinuation()) this.getDialogues().clickContinue(); etc... Edited November 4, 2015 by Precise Quote Link to comment Share on other sites More sharing options...
ColtMeister Posted November 4, 2015 Author Share Posted November 4, 2015 add some if and else if statements calling the these to determine which one to call etc: http://osbot.org/api/org/osbot/rs07/api/Dialogues.html#isPendingContinuation-- http://osbot.org/api/org/osbot/rs07/api/Dialogues.html#isPendingOption-- Okay great! So basically, I just need to sort of structure the code around these constant 'ticks' or 'checks' by the onLoop method. As in, I have to prepare for the asynchronous behavior by using methods like the ones you provided etc etc. Thanks so much! Quote Link to comment Share on other sites More sharing options...
Bobrocket Posted November 4, 2015 Share Posted November 4, 2015 Okay great! So basically, I just need to sort of structure the code around these constant 'ticks' or 'checks' by the onLoop method. As in, I have to prepare for the asynchronous behavior by using methods like the ones you provided etc etc. Thanks so much! Most methods in the API are synchronous. A few exceptions would be the camera API (Camera.toEntity()), and maybe some mouse stuff. When using events, you can set them to async (event.setBlocking(false) I believe?) Quote Link to comment Share on other sites More sharing options...
FrostBug Posted November 5, 2015 Share Posted November 5, 2015 You should probably just strive towards only doing 1 action every loop cycle. Always evaluate the action that currently needs to be done based on the current situation, not by assuming that previous actions completed successfully. Quote Link to comment Share on other sites More sharing options...