TheAnswer Posted July 4, 2013 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
TheAnswer Posted July 4, 2013 Author Posted July 4, 2013 yeah sorry dam formatting in this is pretty bad
Led Zeppelin Posted July 8, 2013 Posted July 8, 2013 (edited) this will be very useful Edited July 8, 2013 by LedZeppelin
Aidden Posted July 8, 2013 Posted July 8, 2013 Thanks for this, will be really useful! Don't know why its not already in the bot itself
TheAnswer Posted July 31, 2013 Author Posted July 31, 2013 (edited) I cleaned up the post Edited August 1, 2013 by TheAnswer
liverare Posted August 6, 2013 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
TheAnswer Posted August 20, 2013 Author 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
Bake me a cake Posted August 21, 2013 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.