LordJashin32 54 Share Posted August 20, 2020 Got pretty far on this. Got it to run 2-3 scripts back to back only to run out of memory and freeze. Just want this for local scripts. Be good for a bot farm where u scripted your own local script collection. Saw there was one a couple years ago but don't see any today. GUI: Main.java import java.awt.Graphics; import java.awt.event.WindowEvent; import java.util.List; import java.util.Timer; import org.dreambot.api.script.AbstractScript; import org.dreambot.api.script.Category; import org.dreambot.api.script.ScriptManager; import org.dreambot.api.script.ScriptManifest; import org.dreambot.api.script.loader.LocalLoader; @ScriptManifest(author = "LordJashin32", category = Category.UTILITY, name = "ScriptScheduler", description = "Run multiple local scripts in a row nonstop. Daisy Chain your way to victory!", version = 0.1) public class Main extends AbstractScript { private Timer timeRan; public ScriptManager mg; private MainGUI gui; private boolean startScript; /** * Script loop. */ @Override public int onLoop() { if (startScript) { if (gui.model1 != null) for(int i = 0; i< gui.model1.getSize();i++){ String script1 = gui.model1.getElementAt(i); String[] parts = script1.split("\\^"); Integer RunTime = Integer.valueOf(parts[1]); ScriptManager mg = new ScriptManager(getClient().getInstance()); log("Running for " + Integer.toString(RunTime) + "m: " + parts[0]); if (parts.length > 2) mg.start(parts[0], parts[2].split(";")); else mg.start(parts[0]); sleep((RunTime * 60000)); mg.stop(); sleep(1000); log("Finished script moving to next"); } stop(); } return 300; } /** * Canvas paint call. */ @Override public void onPaint(Graphics graphics) { // graphics.drawString("drawing muh string", 1, 2); } /** * Default on start action. Can be removed if not needed. */ @Override public void onStart() { startScript = false; gui = new MainGUI(this); for (ScriptManifest script : LocalLoader.getAllScripts()) { gui.comboBox1.addItem(script.name()); } gui.setVisible(true); //timeRan = new Timer(); log("INFO - Script Started!"); log("INFO - Default onStart() method called"); } /** * On start with paramters. Can be removed if not needed. */ @Override public void onStart(String... args) { log("INFO - Parameterized onStart(String... args) method called"); // List all of the script arguments log("--- Argument list ---"); for (int i = 0; i < args.length; i++) { log("Argument " + i + " = " + args[i]); } // INSERT ARGUMENT HANDELING HERE // For actions both onStart methods share place them all in the // non-parameterized onStart(). onStart(); } @Override public void onExit() { if ((gui != null) || gui.isVisible()) gui.dispatchEvent(new WindowEvent(gui, WindowEvent.WINDOW_CLOSING)); log("INFO - Script Ended!"); } public void setStartScript(boolean startScript) { this.startScript = startScript; } } MainGUI.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; /* * Created by JFormDesigner on Wed Aug 19 06:10:31 EDT 2020 */ /** * @author unknown */ public class MainGUI extends JFrame { private Main ctx; public MainGUI(Main main){ this.ctx = main; initComponents(); } // Add private void button2ActionPerformed(ActionEvent e) { model1.addElement(comboBox1.getSelectedItem().toString() + "^" + spinner1.getValue().toString() + "^" + textField1.getText()); } // Remove private void button1ActionPerformed(ActionEvent e) { int index = list1.getSelectedIndex(); if (index != -1) model1.remove(index); if (index > 0) list1.setSelectedIndex(index - 1); } private void button3ActionPerformed(ActionEvent e) { ctx.setStartScript(true); this.setVisible(false); } private void initComponents() { this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ ctx.stop(); } }); scrollPane3 = new JScrollPane(); model1 = new DefaultListModel<>(); list1 = new JList<>( model1 ); scrollPane2 = new JScrollPane(); label4 = new JLabel(); comboBox1 = new JComboBox(); label2 = new JLabel(); spinner1 = new JSpinner(); label3 = new JLabel(); textField1 = new JTextField(); button2 = new JButton(); button1 = new JButton(); button3 = new JButton(); label1 = new JLabel(); //======== this ======== setTitle("Script Scheduler"); Container contentPane = getContentPane(); contentPane.setLayout(null); //======== scrollPane3 ======== { //---- list1 ---- list1.setFont(new Font("Times New Roman", Font.BOLD, 16)); list1.setBorder(new MatteBorder(1, 1, 1, 1, Color.black)); list1.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); scrollPane3.setViewportView(list1); } contentPane.add(scrollPane3); scrollPane3.setBounds(20, 15, 465, 162); contentPane.add(scrollPane2); scrollPane2.setBounds(76, 41, 78, 22); //---- label4 ---- label4.setText("Script"); contentPane.add(label4); label4.setBounds(30, 190, 55, label4.getPreferredSize().height); contentPane.add(comboBox1); comboBox1.setBounds(90, 185, 138, 30); //---- label2 ---- label2.setText("Run Time (In Minutes)"); contentPane.add(label2); label2.setBounds(new Rectangle(new Point(245, 190), label2.getPreferredSize())); contentPane.add(spinner1); spinner1.setValue(Integer.valueOf(300)); spinner1.setBounds(new Rectangle(new Point(395, 185),spinner1.getPreferredSize())); //---- label3 ---- label3.setText("Params"); contentPane.add(label3); label3.setBounds(new Rectangle(new Point(30, 225), label3.getPreferredSize())); contentPane.add(textField1); textField1.setBounds(90, 220, 395, textField1.getPreferredSize().height); //---- button2 ---- button2.setText("Add"); button2.addActionListener(e -> button2ActionPerformed(e)); contentPane.add(button2); button2.setBounds(90, 260, 100, 30); //---- button1 ---- button1.setText("Remove"); button1.addActionListener(e -> button1ActionPerformed(e)); contentPane.add(button1); button1.setBounds(215, 260, 100, 30); //---- button3 ---- button3.setText("Start!"); button3.addActionListener(e -> button3ActionPerformed(e)); contentPane.add(button3); button3.setBounds(340, 260, 144, button3.getPreferredSize().height); //---- label1 ---- label1.setText("v0.1"); contentPane.add(label1); label1.setBounds(30, 270, label1.getPreferredSize().width, 15); textField1.setText("Arg1;Arg2;Arg3"); contentPane.setPreferredSize(new Dimension(505, 300)); pack(); setLocationRelativeTo(getOwner()); // JFormDesigner - End of component initialization //GEN-END:initComponents } private JScrollPane scrollPane3; public DefaultListModel<String> model1; public JList<String> list1; private JScrollPane scrollPane2; private JLabel label4; public JComboBox comboBox1; private JLabel label2; private JSpinner spinner1; private JLabel label3; private JTextField textField1; private JButton button2; private JButton button1; private JButton button3; private JLabel label1; // JFormDesigner - End of variables declaration //GEN-END:variables } Just wasn't able to get the ScriptManager to play nice with me. Link to comment Share on other sites More sharing options...
Stoned 52 Share Posted August 21, 2020 I'm high and also have never used ScriptManager, but aren't you delcaring ScriptManager mg = new ScriptManager(getClient().getInstance()); on each for loop? Do you need to call this each time? Also you could declare ScriptManager mg; as a global variable instead of redeclaring it on each loop. Link to comment Share on other sites More sharing options...
LordJashin32 54 Author Share Posted August 21, 2020 10 hours ago, Stoned said: I'm high and also have never used ScriptManager, but aren't you delcaring ScriptManager mg = new ScriptManager(getClient().getInstance()); on each for loop? Do you need to call this each time? Also you could declare ScriptManager mg; as a global variable instead of redeclaring it on each loop. I tried it both ways and it doesn't change anything for the better so I just left it in there. Whether local or global variable. Either way the memory is a problem. Even after running stop it still has the memory stored up. Link to comment Share on other sites More sharing options...
LordJashin32 54 Author Share Posted August 21, 2020 125mb at first Then I get the Looter gui. And i hit start. And get this with memory: Then finally it stops it and tries to run McMonk Boop freezes with that. And then i can't tell if memory overloaded or not but that has to be the only reason right? Link to comment Share on other sites More sharing options...
Stoned 52 Share Posted August 21, 2020 Have you tried increasing the memory to 1GB instead of 256MB? Link to comment Share on other sites More sharing options...
LordJashin32 54 Author Share Posted August 21, 2020 2 hours ago, Stoned said: Have you tried increasing the memory to 1GB instead of 256MB? I ran that with 612mb memory. It shouldn't need more memory. Its only supposed to be running at max 2 scripts at once. I can run these scripts solo just fine on 612mb of memory. Heck even on 256mb i can run both of those individually. The problem is something to do with the garbage collection. For some reason when stopping a script with the scriptmanager api, it doesn't clear it from memory or something and so when it tries to run another script it maxes out and freezes the client and i have to force quit it. Link to comment Share on other sites More sharing options...
Stoned 52 Share Posted August 21, 2020 16 minutes ago, LordJashin32 said: I ran that with 612mb memory. It shouldn't need more memory. Its only supposed to be running at max 2 scripts at once. I can run these scripts solo just fine on 612mb of memory. Heck even on 256mb i can run both of those individually. The problem is something to do with the garbage collection. For some reason when stopping a script with the scriptmanager api, it doesn't clear it from memory or something and so when it tries to run another script it maxes out and freezes the client and i have to force quit it. Fair enough. As I said I haven't used SM so I don't really know what I'm talking about here Are you sure you should be calling mg.stop(); on each loop? I feel like the SM should always been running to manage the scripts. Could it be two instances of SM overlapping that is using up the memory? Link to comment Share on other sites More sharing options...
LordJashin32 54 Author Share Posted August 21, 2020 19 minutes ago, Stoned said: Fair enough. As I said I haven't used SM so I don't really know what I'm talking about here Are you sure you should be calling mg.stop(); on each loop? I feel like the SM should always been running to manage the scripts. Could it be two instances of SM overlapping that is using up the memory? Okay gonna try your suggestion and use mg.getCurrentScript.stop() instead of mg.stop. Gonna run 15 of 2 scripts as a test run. Not gonna run looter. Gonna try two others. EDIT: Running the same script twice in a row doesn't seem to work. or atleast this particular one. EDIT: Calling stop on currently running script apparently stops my script? lol but the log messages are still coming in from it. i don't understand. EDIT: I think my way that i made first works but have to test more. The local scripts i have seem to be the ones that make or break it idk. Gonna have to test more. I tried running McMonk like 7 Times in a row with no problem. Link to comment Share on other sites More sharing options...
LordJashin32 54 Author Share Posted August 21, 2020 Hmm yeah. For some scripts it works. For others it doesn't. I guess I'll just release it then. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.