thepecher Posted July 7, 2017 Share Posted July 7, 2017 (edited) So yeah basically i was bored and decided to come back to osbot after like 2 years. Ill probably be making a couple of scripts again at a later day but to get used to the API i made a couple of scripts. So i present to you PHillGiants, the simplest Hill Giant killer possible. Features: -Kills Hill Giants -Banks for food How to use: - Have desired food in bank as well as a brass key - Start script and fill in GUI - Click on the start button REMARKS: -This script was created very quickly and barely tested, i will probably not support it any further but it should work fine now. -Only tested on F2P where it struggled to find Hill Giants consistently because it was so populated. Will probably work a lot better on P2P or on rather empty worlds. DOWNLOAD: http://www.filedropper.com/phillgiants SOURCE: Spoiler import org.osbot.rs07.api.map.Area; import org.osbot.rs07.api.map.constants.Banks; import org.osbot.rs07.api.model.NPC; import org.osbot.rs07.api.ui.Skill; import org.osbot.rs07.script.Script; import org.osbot.rs07.script.ScriptManifest; import java.awt.*; import java.util.Random; @ScriptManifest(author = "Thepecher", info = "Kills HillGiants", name = "PHillGiants", version = 0, logo = "") public class Main extends Script { public boolean looper=true; Random randomGenerator; Area giants = new Area(3095,9820,3126,9851);//z==0 Area giantsCenter = new Area(3114,9838,3117,9841);//z==0 int exp; String food="Salmon"; long time; String status; public boolean started; GUI gui; @Override public void onStart() { log("Let's get started!"); exp=skills.getExperience(Skill.ATTACK) + skills.getExperience(Skill.STRENGTH) + skills.getExperience(Skill.DEFENCE); randomGenerator = new Random(); time=System.currentTimeMillis(); gui = new GUI(this); started=false; gui.setVisible(true); } @Override public int onLoop() throws InterruptedException { if(!started){ return 200; } food=gui.textField.getText(); gui.setVisible(false); status=getState(); switch (status){ case "FIGHTING": NPC hillgiant=null; if(!myPlayer().isAnimating() && !myPlayer().isUnderAttack() && !myPlayer().isMoving()){ for(NPC npc : getNpcs().getAll()) { log("Testing "+npc.getName()); log("/"+npc.getName()+"/"); if(!npc.isUnderAttack() && npc.getName().equals("Hill Giant")){ log("Found one"); hillgiant=npc; break; } } if(hillgiant !=null){ hillgiant.interact("Attack"); sleep(random(1500,2000)); } } if(myPlayer().getHealthPercent()<50){ inventory.interact("Eat", food); } break; case "BANKING": if(!getBank().isOpen()){ getBank().open(); }else if(!getInventory().contains(food) && !getInventory().contains("Brass key")){ getBank().depositAll(); getBank().withdraw(food,27); getBank().withdraw("Brass key", 1); } break; case "GOING TO BANK": getWalking().webWalk(Banks.VARROCK_WEST); break; case "GOING TO GIANTS": getWalking().webWalk(giantsCenter); break; } return random(2400, 3000); } @Override public void onExit() { log("Mad gains?"); } @Override public void onPaint(Graphics2D g) { g.drawString("Combat EXP gained: " + (skills.getExperience(Skill.ATTACK) + skills.getExperience(Skill.STRENGTH) + skills.getExperience(Skill.DEFENCE)-exp), 20, 300); g.drawString("Time running: "+ formatTime(System.currentTimeMillis()-time), 20, 280); g.drawString("Status :"+status, 20, 260); } public String getState(){ if(giants.contains(myPosition()) && myPlayer().getHealthPercent()>30){ return "FIGHTING"; }else if(Banks.VARROCK_WEST.contains(myPosition()) && !inventory.contains(food)){ return "BANKING"; }else if(giants.contains(myPosition()) && !inventory.contains(food) && myPlayer().getHealthPercent()<30){ return "GOING TO BANK"; }else{return "GOING TO GIANTS";} } public final String formatTime(final long ms){ long s = ms / 1000, m = s / 60, h = m / 60; s %= 60; m %= 60; h %= 24; return String.format("%02d:%02d:%02d", h, m, s); } } GUI class (same package): import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JLabel; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JTextField; import javax.swing.JButton; public class GUI extends JFrame { private JPanel contentPane; public JTextField textField; JButton btnStartScript; /** * Create the frame. */ public GUI(Main main) { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 448, 222); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JLabel lblPhillgiants = new JLabel("PHillGiants"); lblPhillgiants.setFont(new Font("Tahoma", Font.BOLD, 17)); lblPhillgiants.setBounds(180, 11, 108, 34); contentPane.add(lblPhillgiants); JLabel lblPleaseEnterThe = new JLabel("Please enter the desired food: "); lblPleaseEnterThe.setBounds(10, 68, 159, 22); contentPane.add(lblPleaseEnterThe); textField = new JTextField(); textField.setBounds(180, 69, 159, 21); contentPane.add(textField); textField.setColumns(10); btnStartScript = new JButton("Start Script"); btnStartScript.setBounds(180, 133, 89, 23); btnStartScript.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { main.log("Pressed start"); main.started=true; } } ); contentPane.add(btnStartScript); } } PS: ANYONE HAVE SCRIPT IDEAS? Edited July 7, 2017 by thepecher 2 Quote Link to comment Share on other sites More sharing options...
Viston Posted July 7, 2017 Share Posted July 7, 2017 Put it on github or something. Or maybe use a spoiler Quote Link to comment Share on other sites More sharing options...
FuryShark Posted July 7, 2017 Share Posted July 7, 2017 does this include safespots? Quote Link to comment Share on other sites More sharing options...
thepecher Posted July 7, 2017 Author Share Posted July 7, 2017 10 hours ago, FuryShark said: does this include safespots? Nope Quote Link to comment Share on other sites More sharing options...
fonchox Posted October 3, 2017 Share Posted October 3, 2017 Can you reupload this script? Quote Link to comment Share on other sites More sharing options...