Jump to content

Ghoul killer :)


Recommended Posts

Posted
9 hours ago, D Bolter said:

Thanks for sharing! Would you mind pasting the source code so I can learn from it? :D

 

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.function.BooleanSupplier;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import org.osbot.rs07.api.map.Area;
import org.osbot.rs07.api.map.Position;
import org.osbot.rs07.api.model.NPC;
import org.osbot.rs07.api.ui.Message;
import org.osbot.rs07.script.Script;
import org.osbot.rs07.script.ScriptManifest;
import org.osbot.rs07.utility.ConditionalSleep;


@ScriptManifest(author = "Rare Scripts", name = "Ghoul killer", info = "Start in bank or @ Ghouls", version = 1, logo = "")
public final class GhoulKiller extends Script {
	
	public final Area GhoulArea = new Area(3425, 3467, 3438, 3457);
	public final Area BankArea = new Area(3509, 3483, 3513, 3476);
	
	String CurrentState, FoodName;
	private long startTime;
	private MouseTrail trail = new MouseTrail(0, 255, 255, 2000, this);
	private MouseCursor cursor = new MouseCursor(52, 4, Color.red, this);
	public Boolean finishedGUI = false;
	private JPanel ScriptName;
	private JTextField textField;
	int eatOn;

	public void JFrame() {

		JFrame ScriptName;
		ScriptName = new JFrame();
		ScriptName.setTitle("Rare Ghoul killer");
		ScriptName.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		ScriptName.setBounds(100, 100, 406, 155);
		ScriptName.getContentPane();
		ScriptName.setLayout(null);
		
		JComboBox comboBox = new JComboBox();
		comboBox.setModel(new DefaultComboBoxModel(new String[] {"- Food -", "Trout", "Salmon", "Lobster"}));
		comboBox.setBounds(10, 11, 100, 20);
		ScriptName.add(comboBox);
		
		JLabel lblEatOn = new JLabel("Eat on:");
		lblEatOn.setBounds(10, 42, 35, 14);
		ScriptName.add(lblEatOn);
		
		textField = new JTextField();
		textField.setText("56");
		textField.setBounds(55, 39, 22, 20);
		ScriptName.add(textField);
		textField.setColumns(10);
		
		JLabel label = new JLabel("%");
		label.setBounds(83, 42, 11, 14);
		ScriptName.add(label);
		
		JButton btnNewButton = new JButton("Start");
		btnNewButton.setBounds(10, 114, 100, 23);
		ScriptName.add(btnNewButton);
		
		ScriptName.getContentPane().add(btnNewButton);
		ScriptName.setVisible(true);
		btnNewButton.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			// TODO Auto-generated method stub
			ScriptName.setVisible(false);
			ScriptName.dispose();
		    FoodName = comboBox.getSelectedItem().toString();
			eatOn = Integer.parseInt(textField.getText());
			finishedGUI = true;
		}
	});
}
	
@Override
public final void onStart() {
	CurrentState = "Starting script...";
	startTime = System.currentTimeMillis();
	JFrame();
}
	
public void TerminateScript(String reason) {
	log("[Terminate - Reason]: "+reason);
	 widgets.closeOpenInterface(); 
	 stop();
}

public boolean needEating() {
	return myPlayer().getHealthPercent() < eatOn;
}	

public void EatFood() {
	if (getInventory().contains(FoodName)) {
		int oldHealth = myPlayer().getHealthPercent();
		if (getInventory().getItem(FoodName).interact("Eat")) {
			Sleep.sleepUntil(() -> myPlayer().getHealthPercent() > oldHealth, 5000);
		}
	}
}

public void FightMonster(String name) {
	if (needEating()) {
		return;
	}

	
	if (myPlayer().isUnderAttack()) {
		Sleep.sleepUntil(() -> !myPlayer().isUnderAttack() || needEating(), 85000);
		return;
	}
	
	NPC theNpc = getNpcs().closest(name);
	if (theNpc != null && map.canReach(theNpc) && theNpc.isAttackable()) {
		if (theNpc.isVisible()) {
		if (!myPlayer().isUnderAttack() && !theNpc.isUnderAttack() && theNpc.hasAction("Attack")) {
			if (theNpc.interact("Attack")) {
				Sleep.sleepUntil(() -> myPlayer().isUnderAttack() || !theNpc.exists(), 9000);
				Sleep.sleepUntil(() -> !theNpc.exists() || !myPlayer().isUnderAttack() || needEating(), 85000);
			}
		}
	 } else {
		 if (map.isWithinRange(theNpc, 8)) {
				getCamera().toPosition(theNpc.getPosition());
			} else {
				getWalking().webWalk(theNpc.getPosition());
			}
	 }
	}
}

public void WithdrawItem(String name, int amount, boolean StopNotFound) {
if (getBank().contains(name)) {
		getBank().withdraw(name, amount);
	} else {
		if (StopNotFound == true) {
			getBank().close();
			Sleep.sleepUntil(() -> !getBank().isOpen(), 9000);
			TerminateScript("No "+name+" found in bank");
		}
	}	
}

public void HandleBank() throws InterruptedException {
if (getBank().isOpen()) {
	getBank().depositAll();
	WithdrawItem(FoodName, -1, true);
	getBank().close();
	Sleep.sleepUntil(() -> !getBank().isOpen() && getInventory().contains(FoodName), 9000);
} else {
	getBank().open();
}
}

@Override
public final int onLoop() throws InterruptedException {
if (finishedGUI == true) {
	if (getInventory().contains(FoodName)) {
		if (GhoulArea.contains(myPlayer())) {
		if (needEating()) {
			CurrentState = "Eating "+FoodName+"...";
			EatFood();
		} else {
			CurrentState = "Fighting...";
			FightMonster("Ghoul");
		}
		} else {
			CurrentState = "Running to Ghouls...";
			getWalking().webWalk(GhoulArea);
		}
	} else {
		if (BankArea.contains(myPlayer())) {
			CurrentState = "Banking...";
			HandleBank();
		} else {
			CurrentState = "Running to Bank...";
			getWalking().webWalk(BankArea);
		}
	}
}
	return random(50, 500);
}
	
	
@Override
public final void onExit() {
    log("Script terminated! :)");
    ScriptName.setVisible(false);
}		
@Override
public final void onMessage(final Message message) {
    //log("New msg: " + message.getMessage());
}
	
@Override
public void onPaint(final Graphics2D g) {
	trail.paint(g);
	cursor.paint(g);
    g.drawString("Rare Ghoul killer", 12, 130);
	g.drawString("Time running: "+formatTime(System.currentTimeMillis() - startTime), 12, 150);
	g.drawString("State: "+CurrentState, 12, 170);
}

public final String formatTime(final long ms) {
long s = ms / 1000, m = s / 60, h = m / 60, d = h / 24;
s %= 60;
m %= 60;
h %= 24;

return d > 0 ? String.format("%02d:%02d:%02d:%02d", d, h, m, s)
: h > 0 ? String.format("%02d:%02d:%02d", h, m, s) : String.format("%02d:%02d", m, s);
}
	
}

If u have any questions feel free to shoot me a PM :)

  • Like 1

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

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