TheAnswer Posted July 4, 2013 Share Posted July 4, 2013 (edited) This code will show all the item IDs in your inventory and equipment when you view that tab.Imports & Overriding...>>> Add imports: import org.osbot.script.*; import org.osbot.script.rs2.model.Item; import org.osbot.script.rs2.ui.EquipmentSlot; import org.osbot.script.rs2.ui.EquipmentTab; import org.osbot.script.rs2.ui.Tab; import java.awt.*; >>> The override: @Override public void onPaint(Graphics g) { } Step 1 In the onPaint method cast the current Graphics to 2D Graphics and call the method showItemIDs. @Override public void onPaint(Graphics g) { Graphics2D g2 = (Graphics2D)g; showItemIDs(g2); } Step 2 Add the following methods... public void showItemIDs(Graphics2D g2) { Composite old = g2.getComposite(); if(currentTab() == Tab.INVENTORY) { Item[] items = client.getInventory().getItems(); for(int i = 0; i < items.length; i++) { if(currentTab() != Tab.INVENTORY) return; if(items[i] != null) { Rectangle r = client.getInventory().getDestinationForSlot(i); if(r != null) drawItemData(g2, r, items[i].getId()); } } } else if(currentTab() == Tab.EQUIPMENT) { for(Item item : equipmentTab.getItems()) { if(currentTab() != Tab.EQUIPMENT) return; if(item != null) { Rectangle r = client.getInterface(387).getChild(equipmentTab.getSlotForId(item.getId()).childId).getRectangle(); if(r != null) drawItemData(g2, r, item.getId()); } } } g2.setComposite(old); } private void drawItemData(Graphics2D g2, Rectangle r, int id) { int nx = (int) r.getX(), ny = (int) r.getY(), h = g2.getFontMetrics().getHeight(); String s = "" + id; g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.60f)); g2.setColor(Color.WHITE); g2.fillRect(nx + (int) ((r.getWidth() - g2.getFontMetrics().stringWidth(s)) / 2) - 2, ny + h / 4, g2.getFontMetrics().stringWidth(s) + 4, h); g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.00f)); g2.setColor(Color.BLACK); g2.drawString(s, nx + (int) ((r.getWidth() - g2.getFontMetrics().stringWidth(s)) / 2), ny + h); } The Result... Edited September 9, 2013 by TheAnswer 1 Link to comment Share on other sites More sharing options...
Merccy Posted July 4, 2013 Share Posted July 4, 2013 Can you report the code with new lines please Link to comment Share on other sites More sharing options...
TheAnswer Posted July 4, 2013 Author Share Posted July 4, 2013 yeah sorry dam formatting in this is pretty bad Link to comment Share on other sites More sharing options...
Jack Posted July 4, 2013 Share Posted July 4, 2013 This is really cool Link to comment Share on other sites More sharing options...
TheAnswer Posted July 4, 2013 Author Share Posted July 4, 2013 Yeah it was needed lol Link to comment Share on other sites More sharing options...
Merccy Posted July 4, 2013 Share Posted July 4, 2013 Haha nice snippet, keep sharing stuff! Link to comment Share on other sites More sharing options...
Led Zeppelin Posted July 8, 2013 Share Posted July 8, 2013 (edited) this will be very useful Edited July 8, 2013 by LedZeppelin Link to comment Share on other sites More sharing options...
Aidden Posted July 8, 2013 Share Posted July 8, 2013 Thanks for this, will be really useful! Don't know why its not already in the bot itself Link to comment Share on other sites More sharing options...
TheAnswer Posted July 8, 2013 Author Share Posted July 8, 2013 thanks guys Link to comment Share on other sites More sharing options...
H0ppy Posted July 8, 2013 Share Posted July 8, 2013 Good work Link to comment Share on other sites More sharing options...
TheAnswer Posted July 31, 2013 Author Share Posted July 31, 2013 (edited) I cleaned up the post Edited August 1, 2013 by TheAnswer Link to comment Share on other sites More sharing options...
liverare Posted August 6, 2013 Share Posted August 6, 2013 (edited) Please don't take this the wrong way, but after studying your code, I've come up with a more efficient, easy-to-read method: @Override public void onPaint(Graphics arg0) { Graphics2D g = (Graphics2D) arg0; if (currentTab() == Tab.INVENTORY) drawInventory(g); else if (currentTab() == Tab.EQUIPMENT) drawEquipment(g); } public void drawInventory(Graphics2D arg0) { int i = 0; for (Item next : client.getInventory().getItems()) { if (next != null) drawString(arg0, String.valueOf(next.getId()), client.getInventory().getDestinationForSlot(i)); i++; } } public void drawEquipment(Graphics2D arg0) { for (Item next : equipmentTab.getItems()) if (next != null) drawString(arg0, String.valueOf(next.getId()), client.getInterface(387).getChild(equipmentTab.getSlotForId(next.getId()) .childId).getRectangle()); } public void drawString(Graphics2D arg0, String arg1, Rectangle arg2) { if (arg0 == null || arg1 == null || arg1.length() == 0 || arg2 == null || arg2.width <= 0 || arg2.height <= 0) return; // No point painting... FontMetrics fm = arg0.getFontMetrics(); Point p = new Point( (int) (arg2.x + (arg2.width - fm.stringWidth(arg1)) / 2), (int) (arg2.y + (arg2.height - fm.getHeight()))); arg0.setColor(Color.YELLOW); arg0.draw(arg2); arg0.setColor(Color.BLACK); arg0.drawString(arg1, p.x - 2, p.y - 2); arg0.drawString(arg1, p.x - 2, p.y + 2); arg0.drawString(arg1, p.x + 2, p.y - 2); arg0.drawString(arg1, p.x + 2, p.y + 2); arg0.setColor(Color.YELLOW); arg0.drawString(arg1, p.x, p.y); } Edited August 6, 2013 by liverare 1 Link to comment Share on other sites More sharing options...
TheAnswer Posted August 20, 2013 Author Share Posted August 20, 2013 (edited) Please don't take this the wrong way, but after studying your code, I've come up with a more efficient, easy-to-read method: @Override public void onPaint(Graphics arg0) { Graphics2D g = (Graphics2D) arg0; if (currentTab() == Tab.INVENTORY) drawInventory(g); else if (currentTab() == Tab.EQUIPMENT) drawEquipment(g); } public void drawInventory(Graphics2D arg0) { int i = 0; for (Item next : client.getInventory().getItems()) { if (next != null) drawString(arg0, String.valueOf(next.getId()), client.getInventory().getDestinationForSlot(i)); i++; } } public void drawEquipment(Graphics2D arg0) { for (Item next : equipmentTab.getItems()) if (next != null) drawString(arg0, String.valueOf(next.getId()), client.getInterface(387).getChild(equipmentTab.getSlotForId(next.getId()) .childId).getRectangle()); } public void drawString(Graphics2D arg0, String arg1, Rectangle arg2) { if (arg0 == null || arg1 == null || arg1.length() == 0 || arg2 == null || arg2.width <= 0 || arg2.height <= 0) return; // No point painting... FontMetrics fm = arg0.getFontMetrics(); Point p = new Point( (int) (arg2.x + (arg2.width - fm.stringWidth(arg1)) / 2), (int) (arg2.y + (arg2.height - fm.getHeight()))); arg0.setColor(Color.YELLOW); arg0.draw(arg2); arg0.setColor(Color.BLACK); arg0.drawString(arg1, p.x - 2, p.y - 2); arg0.drawString(arg1, p.x - 2, p.y + 2); arg0.drawString(arg1, p.x + 2, p.y - 2); arg0.drawString(arg1, p.x + 2, p.y + 2); arg0.setColor(Color.YELLOW); arg0.drawString(arg1, p.x, p.y); } Nice liverare. I was in my learning phase at the time but thanks for updating Edited August 20, 2013 by TheAnswer Link to comment Share on other sites More sharing options...
Bake me a cake Posted August 21, 2013 Share Posted August 21, 2013 Please don't take this the wrong way, but after studying your code, I've come up with a more efficient, easy-to-read method: @Override public void onPaint(Graphics arg0) { Graphics2D g = (Graphics2D) arg0; if (currentTab() == Tab.INVENTORY) drawInventory(g); else if (currentTab() == Tab.EQUIPMENT) drawEquipment(g); } public void drawInventory(Graphics2D arg0) { int i = 0; for (Item next : client.getInventory().getItems()) { if (next != null) drawString(arg0, String.valueOf(next.getId()), client.getInventory().getDestinationForSlot(i)); i++; } } public void drawEquipment(Graphics2D arg0) { for (Item next : equipmentTab.getItems()) if (next != null) drawString(arg0, String.valueOf(next.getId()), client.getInterface(387).getChild(equipmentTab.getSlotForId(next.getId()) .childId).getRectangle()); } public void drawString(Graphics2D arg0, String arg1, Rectangle arg2) { if (arg0 == null || arg1 == null || arg1.length() == 0 || arg2 == null || arg2.width <= 0 || arg2.height <= 0) return; // No point painting... FontMetrics fm = arg0.getFontMetrics(); Point p = new Point( (int) (arg2.x + (arg2.width - fm.stringWidth(arg1)) / 2), (int) (arg2.y + (arg2.height - fm.getHeight()))); arg0.setColor(Color.YELLOW); arg0.draw(arg2); arg0.setColor(Color.BLACK); arg0.drawString(arg1, p.x - 2, p.y - 2); arg0.drawString(arg1, p.x - 2, p.y + 2); arg0.drawString(arg1, p.x + 2, p.y - 2); arg0.drawString(arg1, p.x + 2, p.y + 2); arg0.setColor(Color.YELLOW); arg0.drawString(arg1, p.x, p.y); } you could name some of your vars better, also look into finalizing some things. Link to comment Share on other sites More sharing options...
Illumi Posted August 22, 2013 Share Posted August 22, 2013 Nice. Looking good. Link to comment Share on other sites More sharing options...