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 } }