Cory Posted August 29, 2013 Share Posted August 29, 2013 (edited) Wrote it in like 20 min as I needed it to record a lot of paths. Source import org.osbot.script.Script; import org.osbot.script.ScriptManifest; import org.osbot.script.mouse.MinimapTileDestination; import org.osbot.script.rs2.map.Position; import javax.swing.*; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * Created with IntelliJ IDEA. * User: Cory * Date: 29/08/13 * Time: 09:08 */ @ScriptManifest(name = "Path Finder", author = "Novum", version = 1D, info = "Novum Path Finder") public class PathRecorder extends Script { private final DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Paths"); private final DefaultTreeModel model = new DefaultTreeModel(rootNode); private final JTree tree = new JTree(model); private DefaultMutableTreeNode lastAdded = null; private Position position = null; private boolean started; public void onStart() { new Gui().init(); } public int onLoop() throws InterruptedException { if(started) { if(tree.getSelectionPaths() == null) return 100; if(position == null || distance(position) >= 10) { DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("Position("+myX()+", "+myY()+", "+myZ()+")"); for(TreePath path : tree.getSelectionPaths()) { DefaultMutableTreeNode last = (DefaultMutableTreeNode)path.getLastPathComponent(); model.insertNodeInto(newNode, last, last.getChildCount()); tree.expandPath(new TreePath(last.getPath())); } position = myPosition(); } } return 0; } public void onPaint(Graphics g) { for(int i = 0; i < rootNode.getChildCount(); i++) { DefaultMutableTreeNode parent = (DefaultMutableTreeNode) rootNode.getChildAt(i); MinimapTileDestination mMTD = null; for(int c = 0; c < parent.getChildCount(); c++) { DefaultMutableTreeNode childAt = (DefaultMutableTreeNode) parent.getChildAt(c); String nodeName = childAt.toString().substring(9); String[] args = nodeName.substring(0, nodeName.length()-1).split(", "); MinimapTileDestination mMTD2 = new MinimapTileDestination(bot, new Position(Integer.parseInt(args[0]), Integer.parseInt(args[1]), Integer.parseInt(args[2]))); if(mMTD != null && mMTD2 != null) { g.setColor(Color.BLACK); if(mMTD2.getBoundingBox() != null && mMTD.getBoundingBox() != null) g.drawLine( mMTD.getBoundingBox().x, mMTD.getBoundingBox().y, mMTD2.getBoundingBox().x, mMTD2.getBoundingBox().y ); } if(mMTD2 != null && mMTD2.getBoundingBox() != null) { g.setColor(Color.RED); ((Graphics2D)g).draw(mMTD2.getBoundingBox()); } mMTD = mMTD2; } } } private class Gui extends JFrame { public void init() { setTitle("Multi-Path Generator"); setBounds(100, 100, 295, 300); setAlwaysOnTop(true); JPanel contentPane = new JPanel(); setContentPane(contentPane); contentPane.setLayout(new BorderLayout(0, 0)); JScrollPane scrollPane = new JScrollPane(); scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); contentPane.add(scrollPane, BorderLayout.CENTER); scrollPane.setViewportView(tree); JToolBar toolBar_1 = new JToolBar(); toolBar_1.setFloatable(false); contentPane.add(toolBar_1, BorderLayout.NORTH); JToolBar toolBar = new JToolBar(); toolBar.setFloatable(false); contentPane.add(toolBar, BorderLayout.SOUTH); JButton btnAdd = new JButton("Add"); btnAdd.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { String name = JOptionPane.showInputDialog(Gui.this, "Name: "); if(name != null && name.length() >= 0) { DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(name); model.insertNodeInto(newNode, rootNode, rootNode.getChildCount()); tree.expandPath(new TreePath(rootNode.getPath())); tree.setSelectionPath(new TreePath(newNode)); lastAdded = newNode; position = null; } } }); toolBar.add(btnAdd); JButton btnClear = new JButton("Clear"); btnClear.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(tree.getSelectionPaths() == null) return; for(TreePath path : tree.getSelectionPaths()) { DefaultMutableTreeNode last = (DefaultMutableTreeNode)path.getLastPathComponent(); for(int c = last.getChildCount()-1; c >= 0; c--) { model.removeNodeFromParent((DefaultMutableTreeNode)last.getChildAt(c)); } } } }); toolBar.add(btnClear); JButton btnRemove = new JButton("Remove"); btnRemove.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(tree.getSelectionPaths() == null) return; for(TreePath path : tree.getSelectionPaths()) { DefaultMutableTreeNode last = (DefaultMutableTreeNode)path.getLastPathComponent(); if(last != rootNode) model.removeNodeFromParent(last); } } }); toolBar.add(btnRemove); JButton btnGet = new JButton("get"); btnGet.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JFrame frame = new JFrame("Code"); frame.setSize(400, 200); frame.setLayout(new BorderLayout()); JTextArea codeBox = new JTextArea(); for(int c = 0; c < rootNode.getChildCount(); c++) { DefaultMutableTreeNode child = (DefaultMutableTreeNode)rootNode.getChildAt(c); StringBuilder builder = new StringBuilder("Position[] "+child.toString()+" = new Position[]{\n"); for(int sc = 0; sc < child.getChildCount(); sc++) { DefaultMutableTreeNode subchild = (DefaultMutableTreeNode)child.getChildAt(sc); builder.append(" new "+subchild.toString()+",\n"); } builder.append("};\n\n"); codeBox.append(builder.toString()); } frame.add(new JScrollPane(codeBox)); frame.setVisible(true); } }); toolBar.add(btnGet); JButton btnAddPosition = new JButton("Add Current"); btnAddPosition.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(lastAdded == null) return; DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("Position("+myX()+", "+myY()+", "+myZ()+")"); model.insertNodeInto(newNode, lastAdded, lastAdded.getChildCount()); tree.expandPath(new TreePath(lastAdded.getPath())); } }); toolBar_1.add(btnAddPosition); JButton btnStart = new JButton("Start"); btnStart.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { TreePath path = tree.getSelectionPath(); if(path == null || path.getLastPathComponent() == rootNode) { String name = JOptionPane.showInputDialog(Gui.this, "Name: "); if(name != null && name.length() >= 0) { DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(name); model.insertNodeInto(newNode, rootNode, rootNode.getChildCount()); tree.expandPath(new TreePath(rootNode.getPath())); tree.setSelectionPath(new TreePath(newNode)); lastAdded = newNode; } } started = true; } }); toolBar_1.add(btnStart); JButton btnStop = new JButton("Stop"); btnStop.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { started = false; position = null; } }); toolBar_1.add(btnStop); setVisible(true); } } } Download https://www.dropbox.com/s/umh4xdkjui3ave4/PathRecorder.jar Edited August 30, 2013 by Cory 1 Link to comment Share on other sites More sharing options...
Diclonius Posted August 29, 2013 Share Posted August 29, 2013 Oh my god I just finished manually typing out a massive path.... Thanks anyway haha! Link to comment Share on other sites More sharing options...
SXForce Posted August 29, 2013 Share Posted August 29, 2013 Haha, i made something like this 2 days ago haha. I had to make some long walks for my script and didnt want to do that myself ofc! Nice work anyway. Link to comment Share on other sites More sharing options...
Illumi Posted August 29, 2013 Share Posted August 29, 2013 Looks great although I very much like the concept of Dunnker's more. Great release. Link to comment Share on other sites More sharing options...
Cory Posted August 29, 2013 Author Share Posted August 29, 2013 Looks great although I very much like the concept of Dunnker's more. Great release. The reason i wrote this is for accuracy, as the path maker/generators atm use newer maps than we actually have, or not a reliable pixel>tile ratio. Link to comment Share on other sites More sharing options...
ah12ims Posted August 29, 2013 Share Posted August 29, 2013 Looks great although I very much like the concept of Dunnker's more. Great release. Link to comment Share on other sites More sharing options...
Deffiliate Posted August 30, 2013 Share Posted August 30, 2013 Looks great although I very much like the concept of Dunnker's more. Great release. The reason i wrote this is for accuracy, as the path maker/generators atm use newer maps than we actually have, or not a reliable pixel>tile ratio. Yes, this is perfect for my needs. Thank you. Link to comment Share on other sites More sharing options...
koos1012 Posted December 9, 2014 Share Posted December 9, 2014 i added it in script but it wond load for some reason help plz Link to comment Share on other sites More sharing options...
Joseph Posted December 9, 2014 Share Posted December 9, 2014 (edited) i added it in script but it wond load for some reason help plz thats because its coded to osb 1. You cant run it on OSB2. Unless you convert it. I dont mind doing it. Done: http://osbot.org/forum/topic/57725-ds-path-collecter/ Edited December 9, 2014 by josedpay Link to comment Share on other sites More sharing options...
Joseph Posted December 9, 2014 Share Posted December 9, 2014 bumping Link to comment Share on other sites More sharing options...