Jump to content

Question about OSBot's synchronous behavior


ColtMeister

Recommended Posts

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. 

Link to comment
Share on other sites

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 by Precise
Link to comment
Share on other sites

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!

Link to comment
Share on other sites

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?)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...