import org.osbot.iF;
import org.osbot.script.Script;
import org.osbot.script.ScriptManifest;
import org.osbot.script.rs2.skill.Skill;
import org.osbot.script.rs2.ui.*;
import org.osbot.script.rs2.utility.Area;
import org.osbot.script.rs2.map.*;
import org.osbot.script.rs2.model.*;
import org.osbot.script.mouse.MouseDestination;
import org.osbot.script.mouse.RectangleDestination;
import java.awt.*;
import java.io.IOException;
import java.io.Serializable;
import java.net.URL;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import javax.imageio.ImageIO;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.awt.event.*;
@ScriptManifest(
name = "Murdeds HillGiant Killer",
author = "Murded",
version = 1D,
info = "SCRIPT INFO"
)
public class MurdedsHillGiants extends Script {
final Area BANK_AREA = new Area(3180,3446,3186,3433);
final Area S1 = new Area(3169,3433,3173,3425);
final Area S2 = new Area(3152,3426,3158,3421);
final Area S3 = new Area(3138,3432,3146,3427);
final Area S4 = new Area(3122,3444,3130,3436);
final Area S5 = new Area(3112,3449,3119,3446);
final Area S6 = new Area(3113,3453,3117,3450);
final Area HILL_GIANTS = new Area(3130,9856,3095,9820);
final Position start = new Position(3171, 3429, 0);
final Position Step1 = new Position(3155, 3424, 0);
final Position Step2 = new Position(3141, 3431, 0);
final Position Step3 = new Position(3127, 3440, 0);
final Position Step4 = new Position(3115, 3449, 0);
final Position TOBANk = new Position(3183, 3438, 0);
final int BRASS_KEY = 983;
public int AMMOUNT = 5;
public int CURRENT_HEALTH = 99;
public int MAX_HEALTH = 99;
public int EAT_HEALTH = 12;
final int BIGBONES = 532;
final int LIMPROOT = 225;
public boolean walkingToGiants = true;
public boolean walkingToBank = false;
public boolean bonesBanked = false;
public boolean hasKey = false;
public boolean hasBones = false;
public boolean hasFood = false;
public boolean hasRoot = false;
public boolean shouldWalk = false;
public boolean groovySucks = true;
public boolean firstRun = true;
public String FOOD = "Lobster";
public int FOODID = 379;
public boolean guiWait = true;
enum State {
INIT, FIRSTWALK, S1, S2, S3, S4, S5, S6, LOOTBONES, FULLINVO, Waiting
}
def state = State.INIT
private final Font font1 = new Font("Calibri", 1, 12)
private final Color color1 = new Color(255, 255, 255);
private boolean doorClosed(){
RS2Object DungeonDoor = closestObjectForName("Door");
if(DungeonDoor != null){
for (String s:DungeonDoor.getDefinition().getActions()){
if(s != null){
if(s.equals("Open")){
return true;
}
}
}
return false;
}else{
return false;
}
}
void getKey() {
RS2Object bank = closestObjectForName("Bank booth");
if (bank != null && bank.getPosition().distance(client.getMyPlayer().getPosition()) <= 8) {
client.moveCameraToEntity(bank);
selectEntityOption(bank, true, "Bank");
sleep(random(1000, 1500));
if(client.getBank().isOpen()) {
if(!client.getInventory().contains(BRASS_KEY)) {
client.getBank().withdraw(BRASS_KEY, 1);
}
client.getBank().close();
}
} else {
log("Cannot find bank or is not close enough.");
}
}
void bankBones() {
RS2Object bank = closestObjectForName("Bank booth");
if (bank != null && bank.getPosition().distance(client.getMyPlayer().getPosition()) <= 8) {
client.moveCameraToEntity(bank);
selectEntityOption(bank, true, "Bank");
sleep(random(1000, 1500));
if(client.getBank().isOpen()) {
client.getBank().depositAllExcept(BRASS_KEY)
client.getBank().close();
}
} else {
log("Cannot find bank or is not close enough.");
}
}
void getFood() {
RS2Object bank = closestObjectForName("Bank booth");
if (bank != null && bank.getPosition().distance(client.getMyPlayer().getPosition()) <= 8) {
client.moveCameraToEntity(bank);
selectEntityOption(bank, true, "Bank");
sleep(random(1000, 1500));
if(client.getBank().isOpen()) {
if(CURRENT_HEALTH < EAT_HEALTH) {
client.getBank().withdrawX(FOODID, AMMOUNT + 1);
sleep(1000 + random(400));
client.getBank().close();
} else {
client.getBank().withdrawX(FOODID, AMMOUNT);
sleep(1000 + random(400));
client.getBank().close();
}
}
} else {
log("Cannot find bank or is not close enough.");
}
}
void eatFood() {
if(client.isMenuOpen() == false) {
if(client.getInventory().contains(FOODID)) {
client.getInventory().interactWithId(FOODID, "Eat");
} else if (!client.getInventory().contains(FOODID)) {
if(CURRENT_HEALTH < EAT_HEALTH) {
walkingToGiants = false;
walkingToBank = true;
}
}
}
}
void lootBones() {
GroundItem bones = closestGroundItemForName("Big Bones");
if(bones != null) {
if(!client.getInventory().isFull()) {
if (client.getMyPlayer().getPosition().distance(bones.getPosition()) < 3)
{
bones.interact("Take");
sleep(1000 + random(400))
}
}
}
}
void lootRoot() {
GroundItem root = closestGroundItemForName("Limpwurt root");
if(root != null) {
if(!client.getInventory().isFull()) {
if (client.getMyPlayer().getPosition().distance(root.getPosition()) < 9)
{
root.interact("Take");
sleep(1000 + random(400))
}
}
}
}
void attackGiant() {
//if(!client.getInventory().contains(BIGBONES, 27)) {
if(!client.getMyPlayer().isUnderAttack()) {
if(CURRENT_HEALTH > EAT_HEALTH) {
NPC npc = closestNPCForName("Hill Giant");
if (npc != null) {
if(npc.isVisible()) {
if(!npc.isUnderAttack()) {
npc.interact("Attack");
sleep(1000 + random(400));
}
} else {
client.moveCameraToEntity(npc);
}
}
}
}
}
//}
private boolean canClimbDown(){
RS2Object ladder = closestObjectForName("Ladder");
if(ladder != null){
for (String s:ladder.getDefinition().getActions()){
if(s != null){
if(s.equals("Climb-down")){
return true;
}
}
}
return false;
}else{
return false;
}
}
private boolean canClimbUp(){
RS2Object ladder = closestObjectForName("Ladder");
if(ladder != null){
for (String s:ladder.getDefinition().getActions()){
if(s != null){
if(s.equals("Climb-up")){
return true;
}
}
}
return false;
}else{
return false;
}
}
@Override
public void onStart() {
MurdedsSpidersGUI g = new MurdedsSpidersGUI();
g.setVisible(true);
state = State.INIT;
}
@Override
public int onLoop() {
while(guiWait == true)
{
sleep(1000);
}
CURRENT_HEALTH = client.getSkills().getCurrentLevel(Skill.HITPOINTS);
MAX_HEALTH = client.getSkills().getLevel(Skill.HITPOINTS);
if(client.getInventory().contains(BRASS_KEY))
{
hasKey = true;
} else {
hasKey = false;
}
if(client.getInventory().contains(FOODID))
{
hasFood = true;
} else {
hasFood = false;
}
if(client.getInventory().contains(BIGBONES))
{
hasBones = true;
} else {
hasBones = false;
}
if(client.getInventory().contains(LIMPROOT))
{
hasRoot = true;
} else {
hasRoot = false;
}
if(CURRENT_HEALTH <= (EAT_HEALTH)) {
eatFood();
}
if(BANK_AREA.contains(client.getMyPlayer()))
{
if(hasKey == false)
{
getKey();
sleep(1000 + random(400));
}
if(hasBones) {
bankBones();
sleep(1000 + random(400));
}
if(hasFood == false) {
if(client.getInventory().isFull() == false) {
getFood();
sleep(1000 + random(400));
}
}
if(hasKey && hasFood && hasBones == false && hasRoot == false) {
shouldWalk = true;
} else {
shouldWalk = false;
}
if(shouldWalk) {
walkingToGiants = true;
walkingToBank = false;
state = State.FIRSTWALK;
}
}
if(S1.contains(client.getMyPlayer())){
state = State.S1;
}
if(S2.contains(client.getMyPlayer())){
state = State.S2;
}
if(S3.contains(client.getMyPlayer())){
state = State.S3;
}
if(S4.contains(client.getMyPlayer())){
state = State.S4;
}
if(S5.contains(client.getMyPlayer())){
state = State.S5;
}
if(S6.contains(client.getMyPlayer())){
state = State.S6;
}
if(client.getInventory().isFull()) {
walkingToBank = true;
walkingToGiants = false;
}
if(HILL_GIANTS.contains(client.getMyPlayer())){
if(walkingToGiants)
{
lootBones();
lootRoot();
attackGiant();
} else {
RS2Object ladder = closestObjectForName("Ladder");
if ((ladder != null) && canClimbUp()) {
selectEntityOption(ladder,"Climb-up");
sleep(1000 + random(400));
}
}
}
try {
switch(state) {
case State.FIRSTWALK:
return FIRSTWALK();
case State.S1:
return STEP1();
case State.S2:
return STEP2();
case State.S3:
return STEP3();
case State.S4:
return STEP4();
case State.S5:
return STEP5();
case State.S6:
return STEP6();
case State.FULLINVO:
return FULLINVENTORY();
case State.Waiting:
return Waiting();
}
return 20 + gRandom(100, 100);
} catch (InterruptedException e) {
throw e;
} catch (Exception e) {
e.printStackTrace();
return 100 + gRandom(200, 100);
}
}
@Override
public void onPaint(Graphics g){
g.setFont(font1)
g.setColor(color1)
g.drawString(":: Current State: " + state, 325, 12)
g.drawString(":: Current Health: " + CURRENT_HEALTH + " / " + MAX_HEALTH, 325, 32)
g.drawString(":: walkingToBank: " + walkingToBank, 325, 52)
g.drawString(":: walkingToGiants: " + walkingToGiants, 325, 72)
g.drawString(":: Should Walk?: " + shouldWalk, 325, 92)
g.drawString(":: Has Food?: " + hasFood, 325, 112)
g.drawString(":: Has Root?: " + hasRoot, 325, 132)
g.drawString(":: Has Key?: " + hasKey, 325, 152)
g.drawString(":: Has Bones?: " + hasBones, 325, 172)
}
int FIRSTWALK() {
walkMiniMap(start);
sleep(1000 + random(400))
}
int STEP1() {
if(walkingToGiants) {
walkMiniMap(Step1);
sleep(1000 + random(400))
} else if(walkingToBank) {
walkMiniMap(TOBANk);
sleep(1000 + random(400))
state = State.Waiting
}
}
int Waiting() {
if(shouldWalk) {
state = State.FIRSTWALK;
sleep(1000 + random(400))
}
}
int STEP2() {
if(walkingToGiants) {
walkMiniMap(Step2);
sleep(1000 + random(400))
}else if(walkingToBank) {
walkMiniMap(start);
sleep(1000 + random(400));
}
//walkMiniMap(atladder);
//sleep(1000 + random(400))
//state = State.ATMANHOLE;
}
int STEP3() {
if(walkingToGiants) {
walkMiniMap(Step3);
sleep(1000 + random(400))
} else if(walkingToBank) {
walkMiniMap(Step1);
sleep(1000 + random(400));
}
//walkMiniMap(atladder);
//sleep(1000 + random(400))
//state = State.ATMANHOLE;
}
int STEP4() {
if(walkingToGiants) {
walkMiniMap(Step4);
sleep(1000 + random(400))
} else if(walkingToBank) {
walkMiniMap(Step2);
sleep(1000 + random(400));
}
//walkMiniMap(atladder);
//sleep(1000 + random(400))
//state = State.ATMANHOLE;
}
int STEP5() {
if(walkingToGiants) {
RS2Object DungeonDoor = closestObjectForName("Door");
if ((DungeonDoor != null) && doorClosed()) {
selectEntityOption(DungeonDoor,"Open");
sleep(1000 + random(400));
}
} else if(walkingToBank) {
walkMiniMap(Step3);
sleep(1000 + random(400));
}
}
int STEP6() {
if(walkingToGiants) {
RS2Object ladder = closestObjectForName("Ladder");
if ((ladder != null) && canClimbDown()) {
selectEntityOption(ladder,"Climb-down");
sleep(1000 + random(400));
}
} else if(walkingToBank) {
RS2Object DungeonDoor = closestObjectForName("Door");
if ((DungeonDoor != null) && doorClosed()) {
selectEntityOption(DungeonDoor,"Open");
sleep(1000 + random(400));
}
}
}
int D4() {
walkMiniMap(Dungeon4);
sleep(1000 + random(400))
}
int D5() {
walkMiniMap(Dungeon5);
sleep(1000 + random(400))
}
int D6() {
walkMiniMap(Dungeon6);
sleep(1000 + random(400))
}
int D7() {
walkMiniMap(Dungeon7);
sleep(1000 + random(400))
}
int D8() {
RS2Object DungeonDoor = closestObjectForName("Door");
if ((DungeonDoor != null) && doorClosed()) {
selectEntityOption(DungeonDoor,"Open");
sleep(1000 + random(400));
} else {
walkMiniMap(Dungeon9);
sleep(1000 + random(400));
}
}
int D9() {
RS2Object DungeonDoor = closestObjectForName("Door");
if ((DungeonDoor != null) && doorClosed()) {
selectEntityOption(DungeonDoor,"Open");
sleep(1000 + random(400));
} else {
walkMiniMap(Dungeon10);
sleep(1000 + random(400));
}
}
int D10() {
walkMiniMap(Dungeon11);
sleep(1000 + random(400))
}
int D11() {
RS2Object web = closestObjectForName("Web");
if ((web != null) && webSlashed()) {
selectEntityOption(web,"Slash");
sleep(1000 + random(400));
} else {
walkMiniMap(Dungeon12);
sleep(1000 + random(400));
}
}
int D12() {
walkMiniMap(Spiders);
sleep(1000 + random(400))
}
int Spiders2() {
NPC npc = closestNPCForName("Deadly red spider");
if (npc != null) {
if(npc.isVisible()) {
if(!npc.isUnderAttack()) {
npc.interact("Attack");
sleep(1000 + random(400));
}
} else {
client.moveCameraToEntity(npc);
}
}
}
class MurdedsSpidersGUI extends JFrame {
public MurdedsSpidersGUI() {
initComponents();
}
private void button1ActionPerformed(ActionEvent e) {
FOODID = Integer.parseInt(foodID.getText());
AMMOUNT = Integer.parseInt(foodAmmount.getText());
EAT_HEALTH = Integer.parseInt(foodEat.getText());
guiWait = false;
}
private void initComponents() {
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
// Generated using JFormDesigner Evaluation license - josh jones
l = new JLabel();
label4 = new JLabel();
label5 = new JLabel();
l2 = new JLabel();
foodID = new JTextField();
button1 = new JButton();
foodAmmount = new JTextField();
foodEat = new JTextField();
label2 = new JLabel();
label1 = new JLabel();
//======== this ========
setBackground(Color.white);
setIconImage(null);
setResizable(false);
Container contentPane = getContentPane();
contentPane.setLayout(null);
//---- l ----
l.setText("Food ID Here");
l.setForeground(Color.white);
l.setFont(new Font("Tahoma", Font.PLAIN, 18));
contentPane.add(l);
l.setBounds(250, 75, 145, 25);
//---- label4 ----
label4.setText("Food Per Trip");
label4.setForeground(Color.white);
label4.setFont(new Font("Tahoma", Font.PLAIN, 18));
contentPane.add(label4);
label4.setBounds(260, 135, 110, 25);
//---- label5 ----
label5.setText("Eat when HP is Below");
label5.setForeground(Color.white);
label5.setFont(new Font("Tahoma", Font.PLAIN, 18));
contentPane.add(label5);
label5.setBounds(225, 200, 180, 25);
//---- l2 ----
l2.setIcon(new ImageIcon("C:\\Users\\Andrew\\Desktop\\icons.png"));
contentPane.add(l2);
l2.setBounds(-10, -30, 640, 442);
contentPane.add(foodID);
foodID.setBounds(210, 110, 200, 25);
//---- button1 ----
button1.setText("Start");
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
button1ActionPerformed(e);
}
});
contentPane.add(button1);
button1.setBounds(230, 310, 160, 65);
//---- foodAmmount ----
foodAmmount.setText("5");
contentPane.add(foodAmmount);
foodAmmount.setBounds(215, 170, 200, 25);
//---- foodEat ----
foodEat.setText("12");
contentPane.add(foodEat);
foodEat.setBounds(215, 235, 200, 25);
//---- label2 ----
label2.setText("Murdeds Hill Giants");
label2.setFont(new Font("Tahoma", Font.PLAIN, 24));
label2.setHorizontalAlignment(SwingConstants.CENTER);
label2.setAlignmentY(-0.5F);
label2.setForeground(Color.white);
contentPane.add(label2);
label2.setBounds(135, -10, 350, 40);
//---- label1 ----
label1.setIcon(new ImageIcon("C:\\Users\\Andrew\\Desktop\\basicGUI.png"));
contentPane.add(label1);
label1.setBounds(-5, 0, 630, 400);
if(groovySucks)
{ // compute preferred size
Dimension preferredSize = new Dimension();
for(int i = 0; i < contentPane.getComponentCount(); i++) {
Rectangle bounds = contentPane.getComponent(i).getBounds();
preferredSize.width = Math.max(bounds.x + bounds.width, preferredSize.width);
preferredSize.height = Math.max(bounds.y + bounds.height, preferredSize.height);
}
Insets insets = contentPane.getInsets();
preferredSize.width += insets.right;
preferredSize.height += insets.bottom;
contentPane.setMinimumSize(preferredSize);
contentPane.setPreferredSize(preferredSize);
}
setSize(635, 435);
setLocationRelativeTo(getOwner());
// JFormDesigner - End of component initialization //GEN-END:initComponents
}
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
// Generated using JFormDesigner Evaluation license - josh jones
private JLabel l;
private JLabel label4;
private JLabel label5;
private JLabel l2;
private JTextField foodID;
private JButton button1;
private JTextField foodAmmount;
private JTextField foodEat;
private JLabel label2;
private JLabel label1;
// JFormDesigner - End of variables declaration //GEN-END:variables
}
}