Optimum Scripts Posted June 17, 2016 Posted June 17, 2016 (edited) My current progression bar isn't working correctly, it's shortening instead of widening gif: http://i.imgur.com/VV7g5JA.gifv here is the code: /** * Calculates the length of the progress bar * * @return - the progress bar length */ public int calculateLength() { int value = 0; int alphaFactor = 165; int baseXp = skills.getDynamic(Skill.WOODCUTTING); int currentXp = skills.getExperience(Skill.WOODCUTTING); int nextLevel = skills.getExperienceForLevel( skills.getStatic(Skill.WOODCUTTING) + 1 ); currentXp -= nextLevel; currentXp += baseXp; value = currentXp; return Math.abs(value) / alphaFactor; } i want it to increase in size fixed: /** * Calculates the length of the progress bar * * @return - the progress bar length */ public int calculateLength() { int value = 0; int alphaFactor = 165; int baseXp = skills.getExperienceForLevel( skills.getStatic(Skill.WOODCUTTING)); int currentXp = skills.getExperience(Skill.WOODCUTTING); int nextLevel = skills.getExperienceForLevel( skills.getStatic(Skill.WOODCUTTING) + 1 ); logger.debug("baseXp "+ baseXp); logger.debug("currentXp "+ currentXp); logger.debug("nextLevel "+ nextLevel); int levelXp = nextLevel - baseXp; logger.debug("level xp "+ levelXp); value = (nextLevel - currentXp) -(currentXp - baseXp); logger.debug("new value "+value); return Math.abs(value - levelXp) / alphaFactor; } Edited June 17, 2016 by optimumrsps
Token Posted June 17, 2016 Posted June 17, 2016 My current progression bar isn't working correctly, it's shortening instead of widening gif: http://i.imgur.com/VV7g5JA.gifv here is the code: /** * Calculates the length of the progress bar * * @return - the progress bar length */ public int calculateLength() { int value = 0; int alphaFactor = 165; int baseXp = skills.getDynamic(Skill.WOODCUTTING); int currentXp = skills.getExperience(Skill.WOODCUTTING); int nextLevel = skills.getExperienceForLevel( skills.getStatic(Skill.WOODCUTTING) + 1 ); currentXp -= nextLevel; currentXp += baseXp; value = currentXp; return Math.abs(value) / alphaFactor; } i want it to increase in size look at your baseXp 2
Optimum Scripts Posted June 17, 2016 Author Posted June 17, 2016 (edited) look at your baseXp I'm pretty sure dynamic didn't mean anything unless i was using dragon axe using the special, changed it and still the same error. Thanks though for spotting that out Edited June 17, 2016 by optimumrsps
LoudPacks Posted June 17, 2016 Posted June 17, 2016 I'm pretty sure dynamic didn't mean anything unless i was using dragon axe using the special, changed it and still the same error. Thanks though for spotting that out Dynamic gives you your current level, not experience 1
Apaec Posted June 17, 2016 Posted June 17, 2016 (edited) I'll post this in the snippet section a little later, but here's something I just whipped up which should cover everything you need for progress bars Class: import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.geom.Rectangle2D; import org.osbot.rs07.api.ui.Skill; import org.osbot.rs07.script.Script; public class ProgressBar { /** * @author © Apaec * @since 17 Jun 2016 * @file ProgressBar.java */ Script s; Graphics g; String name; Skill skill; boolean frame; int x, y, width, height; Color red = new Color(255, 0, 0, 150); Color green = new Color(0, 255, 0, 150); Font font; int[] XP = { 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 }; public ProgressBar(Script script, Graphics graphics, String name, Skill skill, boolean frame, int transparency, Font font, int x, int y, int width, int height) { this.s = script; this.g = graphics; this.name = name; this.skill = skill; this.frame = frame; this.x = x; this.y = y; this.width = width; this.height = height; this.red = new Color(255, 0, 0, transparency); this.green = new Color(0, 255, 0, transparency); this.font = font; } public int getCurrentExperience() { return s.getSkills().getExperience(skill) - XP[s.getSkills().getStatic(skill) - 1]; } public int getTargetExperience() { return XP[s.getSkills().getStatic(skill)] - XP[s.getSkills().getStatic(skill) - 1]; } public int getRemainingExperience() { return XP[s.getSkills().getStatic(skill) + 1] - s.getSkills().getExperience(skill); } public int getPercentage(int current, int total) { return current * 100 / total; } public int getWidth(int percentage, int totalWidth) { return percentage * totalWidth / 100; } public void draw() { // Current percentage g.setColor(green); g.fillRect(x, y, getWidth(getPercentage(getCurrentExperience(),getTargetExperience()), width), height); // Remaining percentage g.setColor(red); g.fillRect(x + getWidth(getPercentage(getCurrentExperience(), getTargetExperience()), width), y, width - getWidth(getPercentage(getCurrentExperience(), getTargetExperience()), width), height); // Frame if (frame) { g.setColor(Color.BLACK); g.drawRect(x, y, width, height); } // Setting text font and colour g.setColor(Color.WHITE); g.setFont(font); // The text which we want to show on the progress bar String text = name + " (" + s.getSkills().getStatic(skill) + "): " + getPercentage(getCurrentExperience(), getTargetExperience()) + "%"; // Create a bounding box around the text FontMetrics metrics = g.getFontMetrics(font); Rectangle2D rect = metrics.getStringBounds(text, g); int textHeight = (int) (rect.getHeight()); int textWidth = (int) (rect.getWidth()); // Get the text x and y co-ordinates relative to the progress bar int xText = (width - textWidth) / 2; int yText = (height - textHeight) / 2 + metrics.getAscent(); // Draw text over progress bar g.drawString(text, x + xText, y + yText); } } Implementation (in onPaint class): ProgressBar bar = new ProgressBar(this, g, "Ranged", Skill.RANGED, true, 150, new Font("Gulim", 0, 14), 10, 200, 200, 25); bar.draw(); Examples: Hope that helps, ~apa Edit: I didn't see skills has experienceToLevel, so you can always tidy the code in that respect. Edited June 17, 2016 by Apaec 3
Optimum Scripts Posted June 17, 2016 Author Posted June 17, 2016 I'll post this in the snippet section a little later, but here's something I just whipped up which should cover everything you need for progress bars Class: import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.geom.Rectangle2D; import org.osbot.rs07.api.ui.Skill; import org.osbot.rs07.script.Script; public class ProgressBar { /** * @author © Apaec * @since 17 Jun 2016 * @file ProgressBar.java */ Script s; Graphics g; String name; Skill skill; boolean frame; int x, y, width, height; Color red = new Color(255, 0, 0, 150); Color green = new Color(0, 255, 0, 150); Font font; int[] XP = { 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 }; public ProgressBar(Script script, Graphics graphics, String name, Skill skill, boolean frame, int transparency, Font font, int x, int y, int width, int height) { this.s = script; this.g = graphics; this.name = name; this.skill = skill; this.frame = frame; this.x = x; this.y = y; this.width = width; this.height = height; this.red = new Color(255, 0, 0, transparency); this.green = new Color(0, 255, 0, transparency); this.font = font; } public int getCurrentExperience() { return s.getSkills().getExperience(skill) - XP[s.getSkills().getStatic(skill) - 1]; } public int getTargetExperience() { return XP[s.getSkills().getStatic(skill)] - XP[s.getSkills().getStatic(skill) - 1]; } public int getRemainingExperience() { return XP[s.getSkills().getStatic(skill) + 1] - s.getSkills().getExperience(skill); } public int getPercentage(int current, int total) { return current * 100 / total; } public int getWidth(int percentage, int totalWidth) { return percentage * totalWidth / 100; } public void draw() { // Current percentage g.setColor(green); g.fillRect(x, y, getWidth(getPercentage(getCurrentExperience(),getTargetExperience()), width), height); // Remaining percentage g.setColor(red); g.fillRect(x + getWidth(getPercentage(getCurrentExperience(), getTargetExperience()), width), y, width - getWidth(getPercentage(getCurrentExperience(), getTargetExperience()), width), height); // Frame if (frame) { g.setColor(Color.BLACK); g.drawRect(x, y, width, height); } // Setting text font and colour g.setColor(Color.WHITE); g.setFont(font); // The text which we want to show on the progress bar String text = name + " (" + s.getSkills().getStatic(skill) + "): " + getPercentage(getCurrentExperience(), getTargetExperience()) + "%"; // Create a bounding box around the text FontMetrics metrics = g.getFontMetrics(font); Rectangle2D rect = metrics.getStringBounds(text, g); int textHeight = (int) (rect.getHeight()); int textWidth = (int) (rect.getWidth()); // Get the text x and y co-ordinates relative to the progress bar int xText = (width - textWidth) / 2; int yText = (height - textHeight) / 2 + metrics.getAscent(); // Draw text over progress bar g.drawString(text, x + xText, y + yText); } } Implementation (in onPaint class): ProgressBar bar = new ProgressBar(this, g, "Ranged", Skill.RANGED, true, 150, new Font("Gulim", 0, 14), 10, 200, 200, 25); bar.draw(); Examples: Hope that helps, ~apa Edit: I didn't see skills has experienceToLevel, so you can always tidy the code in that respect. Thanks a lot mate, i'll just use yours man
Explv Posted June 17, 2016 Posted June 17, 2016 int[] XP = { 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 }; Nooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 1
Optimum Scripts Posted June 17, 2016 Author Posted June 17, 2016 Noooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo That's what i was thinking, theres already a getExperienceForLevel
Apaec Posted June 17, 2016 Posted June 17, 2016 Nooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo That's what i was thinking, theres already a getExperienceForLevel As I said, I didn't realise the skills api had this ;p
CowsRKewl Posted June 21, 2016 Posted June 21, 2016 How do people know all of this code to put in a script. Idk what to do after Putting in skeleton. LOL.
FrostBug Posted June 21, 2016 Posted June 21, 2016 How do people know all of this code to put in a script. Idk what to do after Putting in skeleton. LOL. They knew the Java language beforehand probably 1
The Hero of Time Posted June 21, 2016 Posted June 21, 2016 How do people know all of this code to put in a script. Idk what to do after Putting in skeleton. LOL.
Fishing Posted September 3, 2016 Posted September 3, 2016 I'll post this in the snippet section a little later, but here's something I just whipped up which should cover everything you need for progress bars Class: import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.geom.Rectangle2D; import org.osbot.rs07.api.ui.Skill; import org.osbot.rs07.script.Script; public class ProgressBar { /** * @[member=Author X]© Apaec * @since 17 Jun 2016 * @file ProgressBar.java */ Script s; Graphics g; String name; Skill skill; boolean frame; int x, y, width, height; Color red = new Color(255, 0, 0, 150); Color green = new Color(0, 255, 0, 150); Font font; int[] XP = { 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 }; public ProgressBar(Script script, Graphics graphics, String name, Skill skill, boolean frame, int transparency, Font font, int x, int y, int width, int height) { this.s = script; this.g = graphics; this.name = name; this.skill = skill; this.frame = frame; this.x = x; this.y = y; this.width = width; this.height = height; this.red = new Color(255, 0, 0, transparency); this.green = new Color(0, 255, 0, transparency); this.font = font; } public int getCurrentExperience() { return s.getSkills().getExperience(skill) - XP[s.getSkills().getStatic(skill) - 1]; } public int getTargetExperience() { return XP[s.getSkills().getStatic(skill)] - XP[s.getSkills().getStatic(skill) - 1]; } public int getRemainingExperience() { return XP[s.getSkills().getStatic(skill) + 1] - s.getSkills().getExperience(skill); } public int getPercentage(int current, int total) { return current * 100 / total; } public int getWidth(int percentage, int totalWidth) { return percentage * totalWidth / 100; } public void draw() { // Current percentage g.setColor(green); g.fillRect(x, y, getWidth(getPercentage(getCurrentExperience(),getTargetExperience()), width), height); // Remaining percentage g.setColor(red); g.fillRect(x + getWidth(getPercentage(getCurrentExperience(), getTargetExperience()), width), y, width - getWidth(getPercentage(getCurrentExperience(), getTargetExperience()), width), height); // Frame if (frame) { g.setColor(Color.BLACK); g.drawRect(x, y, width, height); } // Setting text font and colour g.setColor(Color.WHITE); g.setFont(font); // The text which we want to show on the progress bar String text = name + " (" + s.getSkills().getStatic(skill) + "): " + getPercentage(getCurrentExperience(), getTargetExperience()) + "%"; // Create a bounding box around the text FontMetrics metrics = g.getFontMetrics(font); Rectangle2D rect = metrics.getStringBounds(text, g); int textHeight = (int) (rect.getHeight()); int textWidth = (int) (rect.getWidth()); // Get the text x and y co-ordinates relative to the progress bar int xText = (width - textWidth) / 2; int yText = (height - textHeight) / 2 + metrics.getAscent(); // Draw text over progress bar g.drawString(text, x + xText, y + yText); } } Implementation (in onPaint class): ProgressBar bar = new ProgressBar(this, g, "Ranged", Skill.RANGED, true, 150, new Font("Gulim", 0, 14), 10, 200, 200, 25); bar.draw(); Examples: Hope that helps, ~apa Edit: I didn't see skills has experienceToLevel, so you can always tidy the code in that respect. You havent posted in the Snippet section yet