Jump to content
View in the app

A better way to browse. Learn more.

OSBot :: 2007 OSRS Botting

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Chin Hunter Script doesn't walk or pick up traps

Featured Replies

Hello, I am new to scripting for bots and have recently created a Chin Hunter Script. The Script's logic is fine and should function after reading the code. However, this is not the case. The Script idles after doing nothing in the first state then switches to the second state and begins to idle while using a massive amount of CPU.

 

When the Script calls the onLoop() method, everything works as intended. I am using a "Case-Switch" method to determine which action should be taken at each interval of the Script. The logic works fine, because I can use the logger to determine that different states are being activated. However the ingame player doesn't actually do the actions as intended. Instead the code is simply read then executed WITHOUT doing any of the osBot API actions (WebWalking, getInventory() interactions, Item recognition, etc). Despite all of this, the logger accurately confirms that the actions such as WebWalking are being executed.

 

Here is a snipplet of the code (with documentation):

 

case LAYTRAP: 
			log("LAYING TRAPS...");
			if (!maxTrapsLaid()) {   // maxTrapsLaid() - method that returns boolean of whether trapsLaid equals calculated max traps based on level (works)
				getWalking().webWalk(randomizePosition()); // WebWalk to random position defined by randomizePosition(), returns a Position within 'huntArea'
				getInventory().interact("Box Trap", "Lay"); // GetInventory interaction with a Box Trap to lay the trap (doesn't work)
				sleep(random(1500,3000)); // script delays to lay the next trap in timely manner
				trapsLaid++; // executed after each trap is laid to count amount of traps currently laid, corresponds with maxTrapsLaid() (works)
			}
			break;

 Here is the code without documentation:

case LAYTRAP: 
			log("LAYING TRAPS...");
			if (!maxTrapsLaid()) {
				getWalking().webWalk(randomizePosition());
				getInventory().interact("Box Trap", "Lay");
				sleep(random(1500, 3000));
				trapsLaid++;
			}
			break;

 

I know the Script logic works, because in the Logger I have seen it switch from states "Laying traps" to "Catching Chins", despite doing nothing. The issue is that WebWalking does nothing and Inventory interaction does nothing.. (I've tried to use both String values and Integer values for the first ID parameter of the interact() method)

 

Where have I gone wrong?

 

**EDIT**

I fixed the getInventory().interact() method, it lays traps properly. However it still doesn't detect GroundItems or do any walking.

Edited by TheManWhoBots

Read the docs for the default methods.

 

  • Author
22 minutes ago, Chris said:

Read the docs for the default methods.

 

I've realized that the action and string id parameters were switched, that's why the inventory interaction wouldn't work. It seems to be working now. However walking still does nothing. I've even checked that the script detects the player in the pre-defined 'huntArea', then get the player to move to a random spot within that area.

 

The method looks like: 

getWalking().walk(position);

Where 'position' is the return of a position randomizing method. It doesn't walk, it does nothing.

 

4 hours ago, TheManWhoBots said:

I've realized that the action and string id parameters were switched, that's why the inventory interaction wouldn't work. It seems to be working now. However walking still does nothing. I've even checked that the script detects the player in the pre-defined 'huntArea', then get the player to move to a random spot within that area.

 

The method looks like: 


getWalking().walk(position);

Where 'position' is the return of a position randomizing method. It doesn't walk, it does nothing.

 

Have you tried to set the minimum walking distance threshold to 0? This way the script walks to the exact position you want to go to.

https://osbot.org/api/org/osbot/rs07/event/WalkingEvent.html

  • Author
4 hours ago, Hannes7337 said:

Have you tried to set the minimum walking distance threshold to 0? 

Just tried this. I initialized a new WalkingEvent in the onStart() method, called the setMinimumDistanceThreshold(0), then tried getWalking().getWalk(position) with no luck. My player still does not walk.

 

Could it be that my position coordinates are off, because any example source code I examine uses the same walk() method(s)? My program does detect that my player is in the pre-defined 'huntArea' with chins in it. I've tested it using the logger and the debugger settings.

Hi @TheManWhoBots,

Could you please show us this method randomizePosition() also don't forget to place that trap I imagine you would need to break out of the WebWalking place the trap and then initialise it again. so something like.

final WebWalkEvent trapLocation = new WebWalkEvent(randomPosition());

trapLocation.setBreakCondition(new Condition() {
	@Override
	public boolean condition() {
		return !maxTrapsLaid();
	}
});

script.execute(trapLocation);

And then to check if you have enough traps laid don't quote me if I'm wrong but I'd imagine when you successfully place a trap something a long the lines of 

Quote

You successfully place a trap.

Should print out in the chat box I don't know too much about hunter myself so I'm not sure, anyways you would override the onMessage() and just check if the message contains anything of the likes of successfully placing a trap if so add on to your trapsLaid.

@Override
public void onMessage(Message msg) {
	if (msg.getMessage().contains("You successfully place a trap"))
		trapsLaid++;
	}

I hope this helps you in some way best of luck.

  • Author

@01053 

Hi there, Sorry I won't reveal my method for randomizing the position for various privacy/safety reasons. My scripts aren't open source, and they have a very heavy emphasis on anti-ban along with functionality. I like to keep my code snipplets generic and sparse without revealing the true internal methods to limit the potential privacy leak.

I will however state that I got the script working properly by using some of your code. It seems the getWalking() method doesn't actually work, and what does work is using the generic "execute()" method with a paramaterized instantiation of a local WalkingEvent object. My program works flawlessly now, in terms of walking, and selects a random position with weighted odds to cater to specific tiles(with other various actions).

Thank you for your input.

(Working code) 

case LAYTRAP:
if (!maxTrapsLaid()) {
      WalkingEvent walkingPath = new WalkingEvent(position);
      walkingPath.setMiniMapDistanceThreshold(0);
      walkingPath.setMinDistanceThreshold(0);
      execute(walkingPath);

	  layTrap();
}
break;

 

Edited by TheManWhoBots

6 minutes ago, TheManWhoBots said:

@01053 

Hi there, Sorry I won't reveal my method for randomizing the position for various privacy/safety reasons. My scripts aren't open source, and they have a very heavy emphasis on anti-ban along with functionality. I like to keep my code snipplets generic and sparse without revealing the true internal methods to limit the potential privacy leak.

I will however state that I got the script working properly by using some of your code. It seems the getWalking() method doesn't actually work, and what does work is using the generic "execute()" method with a paramaterized instantiation of a local WalkingEvent object. My program works flawlessly now, in terms of walking, and selects a random position with weighted odds to cater to specific tiles(with other various actions).

Thank you for your input.

(Working code) 


case LAYTRAP:
if (!maxTrapsLaid())
      WalkingEvent walkingPath = new WalkingEvent(position);
      walkingPath.setMiniMapDistanceThreshold(0);
      walkingPath.setMinDistanceThreshold(0);
      execute(walkingPath);

	  layTrap();
break;

 

The getWalking method does the exact same thing; creates a WalkingEvent and executes it.
The difference lies in the distance thresholds you set. And possibly from attempting to re-use the same event

  • Author
1 minute ago, FrostBug said:

The getWalking method does the exact same thing; creates a WalkingEvent and executes it.
The difference lies in the distance thresholds you set. And possibly from attempting to re-use the same event

For some reason getWalking() didn't work for me. Maybe because I wasn't accessing the WalkingEvent properly when setting the minimum thresholds. I tried to implement a new instance locally & globally, and even used the default object. Idk? Glad I got it to work this way though.

Create an account or sign in to comment

Recently Browsing 0

  • No registered users viewing this page.

Account

Navigation

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.