trickked Posted May 15, 2017 Share Posted May 15, 2017 Hey fellas - so i'm working on a thieving script for fun (first time scripting) and for some reason my character clicks the master farmer and instantly logs out. Also - could someone explain to me how i would be able to make the script thieve other npc as well? Thanks. -- Here is my code so far: import org.osbot.rs07.script.Script; import org.osbot.rs07.script.ScriptManifest; import org.osbot.rs07.utility.ConditionalSleep; import javax.swing.*; import org.osbot.rs07.api.model.NPC; import org.osbot.rs07.api.model.RS2Object; import org.osbot.rs07.api.ui.Skill; import java.awt.*; import java.text.DecimalFormat; import java.util.concurrent.TimeUnit; @ScriptManifest(author = "Trickked", info = "My first script", name = "Master Farmer Thiever", version = 0, logo = "") public class Main1 extends Script { // Holds time start of script and how long it ran private long timeBegan; private long timeRan; // Holds XP Gained from beginning/end private int beginningXP; private int currentXP; private int xpGained; // Hold Stat level start/current/amount gained private int currentLevel; private int beginningLevel; private int levelsGained; // Holds percentage till next level and current xp private double currentLevelXp; private double nextLevelXp; private double percentTNL; // Time until next level private int xpPerHour; private double xpTillNextLevel; private long timeTNL; private String selectedThiever = "Master Farmer"; final int[] XP_TABLE = { 0, 0, 83, 174, 276, 388, 512, 650, 801, 969, 1154, 1358, 1584, 1833, 2107, 2411, 2746, 3115, 3523, 3973, 4470, 5018, 5624, 6291, 7028, 7842, 8740, 9730, 10824, 12031, 13363, 14833, 16456, 18247, 20224, 22406, 24815, 27473, 30408, 33648, 37224, 41171, 45529, 50339, 55649, 61512, 67983, 75127, 83014, 91721, 101333, 111945, 123660, 136594, 150872, 166636, 184040, 203254, 224466, 247886, 273742, 302288, 333804, 368599, 407015, 449428, 496254, 547953, 605032, 668051, 737627, 814445, 899257, 992895, 1096278, 1210421, 1336443, 1475581, 1629200, 1798808, 1986068, 2192818, 2421087, 2673114, 2951373, 3258594, 3597792, 3972294, 4385776, 4842295, 5346332, 5902831, 6517253, 7195629, 7944614, 8771558, 9684577, 10692629, 11805606, 13034431, 200000000 }; private JFrame gui; private boolean started = false; private void createGUI() { final int GUI_WIDTH = 400, GUI_HEIGHT = 500; Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); final int gX = (int) (screenSize.getWidth() / 2) - (GUI_WIDTH / 2); final int gY = (int) (screenSize.getHeight() / 2) - (GUI_HEIGHT / 2); gui = new JFrame("GUI"); gui.setBounds(gX, gY, GUI_WIDTH, GUI_HEIGHT); gui.setResizable(false); JPanel panel = new JPanel(); gui.add(panel); JLabel label = new JLabel("Select what you would like to thieve:"); label.setForeground(Color.white); panel.add(label); JComboBox<String> thieverSelector = new JComboBox<>(new String[] { "Master Farmer", "Men", "Guard" }); thieverSelector.addActionListener(e -> selectedThiever = thieverSelector.getSelectedItem().toString()); panel.add(thieverSelector); JButton startButton = new JButton("Start"); startButton.addActionListener(e -> { started = true; gui.setVisible(false); }); panel.add(startButton); gui.setVisible(true); } // Keeps track of the time from start to end @Override public void onStart() { timeBegan = System.currentTimeMillis(); timeRan = System.currentTimeMillis() - this.timeBegan; beginningXP = skills.getExperience(Skill.THIEVING); beginningLevel = skills.getStatic(Skill.THIEVING); timeTNL = 0; getBank().withdraw("Lobster", 10); createGUI(); } // Stores interactions private enum State { PICKPOCKET, BANK, WAIT, EAT }; // Receives interactions made and checks inventory private State getState() { int HpPercent = (getSkills().getDynamic(Skill.HITPOINTS) * 100 / getSkills().getStatic(Skill.HITPOINTS)); NPC farmer = getNpcs().closest("Master Farmer"); if (getInventory().isFull() && !getInventory().contains("Lobster")) return State.BANK; if (farmer != null && !getInventory().isFull() && HpPercent > 50 && !myPlayer().isAnimating()) return State.PICKPOCKET; if (HpPercent < 50 && !myPlayer().isAnimating() && getInventory().getItem("Shrimp").interact("Eat") || getInventory().getItem("Trout").interact("Eat") || getInventory().getItem("Salmon").interact("Eat") || getInventory().getItem("Tuna").interact("Eat") || getInventory().getItem("Lobster").interact("Eat")) return State.EAT; return State.WAIT; } // Continues script until out of food @Override public int onLoop() throws InterruptedException { if (started) { switch (getState()) { case PICKPOCKET: log("Pickpocket"); NPC farmer = getNpcs().closest("Master Farmer"); if (farmer != null) { getNpcs().closest("Master Farmer").interact("Pickpocket"); } else { if (!myPlayer().isAnimating()) ; } case EAT: if (getInventory().contains("Shrimp") || getInventory().contains("Trout") || getInventory().contains("Tuna") || getInventory().contains("Shrimp") || getInventory().contains("Lobster")) { if (getInventory().getSelectedItemName() == null) ; { getInventory().getItem("Lobster").interact("Eat"); } } else { getInventory().deselectItem(); } case BANK: if (getBank().isOpen()) { getBank().depositAll(); getBank().withdraw("Lobster", 10); } else { RS2Object banker = getObjects().closest("Bank Booth"); if (!myPlayer().isAnimating() && !getInventory().contains("Lobster") && banker != null && banker.exists()) { banker.interact("Bank"); sleep(5000); // Put a conditional sleep here! } else { stop(); // Stop if banker could not be found. You will // probably need to add walking here } } break; case WAIT: log("wait"); sleep(random(500, 700)); break; } return random(50, 400); } return 0; } // Sends message once script ends @Override public void onExit() { if (gui != null) { gui.setVisible(false); gui.dispose(); } } // ONPAINT() METHOD public void onPaint(Graphics2D g) { if (started) { timeRan = System.currentTimeMillis() - this.timeBegan; g.drawString("Time Ran: " + ft(timeRan), 80, 75); currentXP = skills.getExperience(Skill.THIEVING); xpGained = currentXP - beginningXP; g.drawString("XP Gained: " + xpGained, 80, 114); currentLevelXp = XP_TABLE[currentLevel]; nextLevelXp = XP_TABLE[currentLevel + 1]; percentTNL = ((currentXP - currentLevelXp) / (nextLevelXp - currentLevelXp) * 100); DecimalFormat df = new DecimalFormat("#.#"); g.drawString("Percent TNL: " + df.format(percentTNL), 80, 153); currentLevel = skills.getStatic(Skill.THIEVING); g.drawString("Beginning Level: " + beginningLevel, 80, 192); g.drawString("Current Level: " + currentLevel, 80, 231); levelsGained = currentLevel - beginningLevel; g.drawString("Levels Gained: " + levelsGained, 80, 270); xpPerHour = (int) (xpGained / ((System.currentTimeMillis() - this.timeBegan) / 3600000.0D)); nextLevelXp = XP_TABLE[currentLevel + 1]; xpTillNextLevel = nextLevelXp - currentXP; if (xpGained >= 1) { timeTNL = (long) ((xpTillNextLevel / xpPerHour) * 3600000); g.drawString("Time TNL: " + ft(timeTNL), 80, 309); } } } private String ft(long duration) { String res = ""; long days = TimeUnit.MILLISECONDS.toDays(duration); long hours = TimeUnit.MILLISECONDS.toHours(duration) - TimeUnit.DAYS.toHours(TimeUnit.MILLISECONDS.toDays(duration)); long minutes = TimeUnit.MILLISECONDS.toMinutes(duration) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(duration)); long seconds = TimeUnit.MILLISECONDS.toSeconds(duration) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(duration)); if (days == 0) { res = (hours + ":" + minutes + ":" + seconds); } else { res = (days + ":" + hours + ":" + minutes + ":" + seconds); } return res; } } Quote Link to comment Share on other sites More sharing options...
phony Posted May 15, 2017 Share Posted May 15, 2017 c&p Quote Link to comment Share on other sites More sharing options...
trickked Posted May 15, 2017 Author Share Posted May 15, 2017 1 minute ago, phony said: c&p ??? Quote Link to comment Share on other sites More sharing options...
JamesJohn01470 Posted May 15, 2017 Share Posted May 15, 2017 case BANK: if (getBank().isOpen()) { getBank().depositAll(); if(getBank().contains("Lobster"){ getBank().withdraw("Lobster", 10); }else { stop(); } } else { RS2Object banker = getObjects().closest("Bank Booth"); if (!myPlayer().isAnimating() && !getInventory().contains("Lobster") && banker != null && banker.exists()) { banker.interact("Bank"); sleep(5000); // Put a conditional sleep here! } if (bankker == null{ stop(); } } break; Quote Link to comment Share on other sites More sharing options...
lfcandy Posted May 15, 2017 Share Posted May 15, 2017 I dont know much about java or state programming but it looks like you aren't looping through your script it runs once and ends. } else { if (!myPlayer().isAnimating()) ; I mean you called an if statement and checked if your player is doing an animation, but don't want to do anything if true, what's the point of doing this.. Quote Link to comment Share on other sites More sharing options...
Deceiver Posted May 15, 2017 Share Posted May 15, 2017 you should look at the ExperienceTracker api, it will reduce your code a lot Quote Link to comment Share on other sites More sharing options...
Shudsy Posted May 15, 2017 Share Posted May 15, 2017 Half of your script could of been removed using the experiencetracker and skills api Quote Link to comment Share on other sites More sharing options...
trickked Posted May 16, 2017 Author Share Posted May 16, 2017 2 hours ago, raijin said: you should look at the ExperienceTracker api, it will reduce your code a lot 1 hour ago, Shudsy said: Half of your script could of been removed using the experiencetracker and skills api Sadly i'm not that familiar with what you mentioned above, as this is my first time scripting. I am still learning on how to use a majority of the things. Quote Link to comment Share on other sites More sharing options...
d0zza Posted May 16, 2017 Share Posted May 16, 2017 12 minutes ago, trickked said: Sadly i'm not that familiar with what you mentioned above, as this is my first time scripting. I am still learning on how to use a majority of the things. It sounds like you've just found this code online somewhere and don't actually understand most of what it's doing. If you want to actually learn how to script look through the tutorials on this forum, this one is a good place to start: Not many people are willing to spoonfeed others Quote Link to comment Share on other sites More sharing options...
trickked Posted May 16, 2017 Author Share Posted May 16, 2017 (edited) 6 minutes ago, d0zza said: It sounds like you've just found this code online somewhere and don't actually understand most of what it's doing. If you want to actually learn how to script look through the tutorials on this forum, this one is a good place to start: Not many people are willing to spoonfeed others I didn't find this online actually. I went through apaecs tutorial/other tutorials on here and learned from that. The comments on the side you see like //conditonal here is from Apaec helping me fix an error i made. Edited May 16, 2017 by trickked Quote Link to comment Share on other sites More sharing options...
d0zza Posted May 16, 2017 Share Posted May 16, 2017 3 minutes ago, trickked said: I didn't find this online actually. I went through apaecs tutorial/other tutorials on here and learned from that. The comments on the side you see like //conditonal here is from Apaec helping me fix an error i made. Well read through your code again then. Switch cases need a break at the end of them otherwise they'll just go into the next case and perform those actions too Quote Link to comment Share on other sites More sharing options...
trickked Posted May 16, 2017 Author Share Posted May 16, 2017 5 minutes ago, d0zza said: Well read through your code again then. Switch cases need a break at the end of them otherwise they'll just go into the next case and perform those actions too thats the whole point of me making a thread in help.. not to be accused of copy and pasting code mate, just saying.. lmao.. I learn from receiving help/looking at tutorials. Quote Link to comment Share on other sites More sharing options...
d0zza Posted May 16, 2017 Share Posted May 16, 2017 3 hours ago, trickked said: thats the whole point of me making a thread in help.. not to be accused of copy and pasting code mate, just saying.. lmao.. I learn from receiving help/looking at tutorials. If you don't know what api is (as you mentioned above) then you're not gonna get very far with scripting. I'm not trying to be a dick I'm just telling the truth. If you did understand what the code is doing then it would be clear that you would need to modify this part of your program to change which npc to steal from case PICKPOCKET: log("Pickpocket"); NPC farmer = getNpcs().closest("Master Farmer"); if (farmer != null) { getNpcs().closest("Master Farmer").interact("Pickpocket"); } else { if (!myPlayer().isAnimating()) ; } Quote Link to comment Share on other sites More sharing options...
Funfight Posted May 16, 2017 Share Posted May 16, 2017 I just started coding and I'll say I'm impressed with what your first script looks like regardless of if 1/2 of it can be reduced. Keep goin Quote Link to comment Share on other sites More sharing options...
Prolax Posted May 16, 2017 Share Posted May 16, 2017 States make it messy. But that's my opinion. Quote Link to comment Share on other sites More sharing options...