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.

Clay Miner

Featured Replies

Hey guys, just sharing one script I've made really quick, it Mines clay in West Varrock, then banks it. After x clay, it trades mule standing in West Bank Area.

 

 

Might help someone biggrin.png

import java.awt.*;
import java.lang.String;
import java.text.Normalizer;

import org.osbot.rs07.api.Bank;
import org.osbot.rs07.api.map.Area;
import org.osbot.rs07.script.Script;
import org.osbot.rs07.script.ScriptManifest;
import org.osbot.rs07.api.model.NPC;
import org.osbot.rs07.api.model.Player;
import org.osbot.rs07.api.model.RS2Object;
import org.osbot.rs07.api.ui.Tab;

import javax.swing.*;

@ScriptManifest(author = "YourName", info = "Miner", name = "Miner", version = 0, logo = "")
public class main extends Script {

	// Areas
	private final Area WEST_VARROCK_BANK = new Area(3185, 3439, 3182, 3433);
	private final Area WEST_MINING_ZONE = new Area(3182, 3378, 3184, 3377);
	private final Area TRADING_AREA = new Area(3185, 3437, 3181, 3434);
	
	private enum State {
		CHECK, MINE, BANK, GRAB_LOAD, TRADE, UNLOAD
	}

	private Window window;

	private State state = State.GRAB_LOAD;
	private boolean isRunning = false;

	private int runs, cooldown, clayNum, world;
	private long elapsed;


	private void Check() throws InterruptedException {

		if(worlds.getCurrentWorld() != world) {
			worlds.hop(world); return;
		}


		if(inventory.isFull()) {
			
			if(tabs.getOpen() != Tab.INVENTORY) {
				tabs.open(Tab.INVENTORY);
			}
			
			if(!WEST_VARROCK_BANK.contains(myPlayer())) {
				RandomSleep();
				MoveToZone(WEST_VARROCK_BANK);
			}

			state = State.BANK;
			
		} else {

			if(!WEST_MINING_ZONE.contains(myPlayer())) {
				RandomSleep();
				MoveToZone(WEST_MINING_ZONE);
			}

			state = State.MINE;
		}
	}
	
	private void Mine() throws InterruptedException {


		RS2Object node = objects.closest(WEST_MINING_ZONE, 7454);
		
		if(node != null) {
			
			if(!node.isVisible()) {
				camera.toEntity(node); sleep(450, 850);
			}
			node.hover(); sleep(10, 25);
			
			if(node.interact("Mine")) {
				RandomizeMouse(); sleep(850, 1250);
				
				while(myPlayer().isAnimating() && node.exists()) sleep(50);
				sleep(250, 450);
			}
		}

		state = State.CHECK;
	}
	
	private void Bank() throws InterruptedException {
		
		if(!bank.isOpen()) {
			
			RS2Object bankx = objects.closest("Bank booth");
			
			if(bankx != null) {
				
				if(!bankx.isVisible()) {
					camera.toEntity(bankx); sleep(650, 1250);
				}
				
				if(bankx.interact("Bank")) {
					sleep(2450, 3250); RandomizeMouse(); RandomSleep();
				}
			}

			return;
		}
		else {
			if(!bank.depositAllExcept(1271)) return;

			runs++;
			sleep(450, 650); RandomizeMouse(); RandomSleep();

			if(runs >= cooldown) {
				bank.enableMode(Bank.BankMode.WITHDRAW_NOTE);
				sleep(250, 500); RandomizeMouse();

				sleep(1250, 1850);
				bank.withdrawAll(434); RandomSleep();
			}

			bank.close(); sleep(1250, 1850);
		}

		if(runs >= cooldown) {
			runs = 0;
			cooldown = random(16, 32);

			state = State.TRADE;
		}
		else {
			state = State.CHECK;
		}
	}

	private void GrabLoad() throws InterruptedException {
	log("load");
	}

	private void Trade() throws InterruptedException {

		if(isTrading()) {
			state = State.UNLOAD;
		}
		else {
			if(getWorlds().getCurrentWorld() != 308) {
				worlds.hop(308); sleep(8*1000, 14*1000);
				return;
			}


			if(!TRADING_AREA.contains(myPlayer())) {
				MoveToZone(TRADING_AREA);
				return;
			}


			Player player = players.closest("YourMuleName");

			if(player != null) {
				if(!player.isVisible()) camera.toEntity(player);
				sleep(1850, 3450);

				player.hover(); sleep(100, 350);

				if(player.interact("Trade with")) {
					sleep(450, 650); RandomizeMouse(); sleep(4500, 6500);
				}
			}
		}
	}

	private void Unload() throws InterruptedException {

		if(isTrading()) {

			if(trade.isFirstInterfaceOpen()) {
				if(!trade.offer(435, inventory.getItem(435).getAmount())) return;

				sleep(450, 850);
				RandomizeMouse(); RandomSleep();

				trade.acceptTrade(); sleep(150, 300); RandomizeMouse();
				while(isTrading() && !trade.didOtherAcceptTrade());
			}

			if(trade.isSecondInterfaceOpen()) {
				RandomSleep();

				trade.acceptTrade(); sleep(150, 300); RandomizeMouse();
				while(isTrading() && !trade.didOtherAcceptTrade());
			}


			return;
		}

		state = State.CHECK;
	}

	
	
    @Override
    public int onLoop() throws InterruptedException {

    	switch(state) {
    		
	    	case CHECK:
	    		log("State: Check");
	    		Check();
	    		break;
	    		
	    	case MINE:
	    		log("State: Mine");
	    		Mine();
	    		break;
	    		
	    	case BANK:
	    		log("State: Bank");
	    		Bank();
	    		break;

			case GRAB_LOAD:
				log("State: Grab Load");
				GrabLoad();
				break;

			case TRADE:
				log("State: Trade");
				Trade();
				break;

	    	case UNLOAD:
				log("State: Unload");
	    		Unload();
	    		break;
    	}
    	
        return random(150, 200);
    }
 
    @Override
    public void onStart() {
		//String input = getClass().getResource("talk").getFile();
		//File file = new File(input);
		isRunning = true;

    	cooldown = random(18, 32);
		world = worlds.getCurrentWorld();




		Thread runTimeThread = new Thread() {

			@Override
			public void run() {
				try {
					RunTime();
				}
				catch (Exception e) {
					log(e.getMessage());
				}
			}
		};

		runTimeThread.start();
    }
    
    @Override
    public void onExit() {
		isRunning = false;
    }

    @Override
    public void onPaint(Graphics2D g) {
    	
    	int x = getMouse().getPosition().x;
    	int y = getMouse().getPosition().y;
    			 
    	g.drawLine(0, y, 765, y);
    	g.drawLine(x, 0, x, 503);

		DrawUpdate(g);
	}


	private void DrawUpdate(Graphics2D g) {

		g.setColor(new Color(0, 0, 0, 80));
		g.fillRect(4, 280, 512, 58);

		g.setColor(Color.white);
		g.setFont(new Font("Consolas", Font.PLAIN, 12));
		g.drawString("RunTime: " + GetRunTime(), 14, 300);

		g.drawString("Clay collected: " + clayNum, 170, 300);
	}

	private void RunTime() throws InterruptedException {

		long startTime = System.currentTimeMillis();

		while(isRunning) {
			elapsed = (System.currentTimeMillis() - startTime);
			sleep(1000);
		}
	}

	private void LaunchGUI() {

	}

	private void CloseGUI() {

	}



	private void sleep(int min, int max) throws InterruptedException {
		sleep(random(min, max));
	}

	private String GetRunTime() {

		long hours = (elapsed / (1000 * 60 * 60)) % 24;
		long minutes = (elapsed / (1000 * 60)) % 60;
		long seconds = (elapsed / 1000) % 60;

		return String.format("%02d:%02d:%02d", hours, minutes, seconds);
	}




	@SuppressWarnings("deprecation")
	private void MoveToZone(Area zone) throws InterruptedException {

		walking.webWalk(zone.getRandomPosition());
	}

	private boolean isTrading() {
		return trade.isCurrentlyTrading();
	}

    private boolean isInRadius(NPC npc) {
    	Player me = myPlayer();
    	
    	int x = me.getX(),
    		y = me.getY();
    	
    	return new Area(x + 1, y + 1, x - 1, y - 1).contains(npc);
    }
    
    private void RandomizeMouse() {
    	switch(random(0, 5)) {
    	case 0:
    		mouse.moveRandomly();
    		break;
    	case 1:
    		mouse.moveOutsideScreen();
    		break;
    	case 2:
    		mouse.moveSlightly();
    		break;
    	}
    }
    
    private void RandomSleep() throws InterruptedException {

    	switch(random(0, 5)) {
    	case 0:
    		sleep(650, 1250);
    		break;
    		
    	case 1:  
    		sleep(1450, 2050);
    		break;
    		
    	case 2: 
    		sleep(2250, 2850);
    		break;
    		
    	case 3:
    		sleep(3050, 3850);
    		break;
    	}
    }
}

Edited by Aeonx

Very nice, I like the whole mule idea so that you can just mass farm and try to keep it all hidden and let the accounts just get banned.

Good job!

  • Author

Very nice, I like the whole mule idea so that you can just mass farm and try to keep it all hidden and let the accounts just get banned.

Good job!

Thanks man! Yeah it's great, just make an army of accounts that way and bans have no much meaning, profit biggrin.png

Edited by Aeonx

Dropping requires interaction between two accounts so it seems like it would be easier to trace a direct correlation rather than another account picking them up.

  • 1 month later...
  • Author

Dropping requires interaction between two accounts so it seems like it would be easier to trace a direct correlation rather than another account picking them up.

 

Hi, it doesn't drop nothing. It trades the mule.

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.