Guest User

XP Tracker

a guest
Mar 8th, 2014
410
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.73 KB | None | 0 0
  1. import java.text.DecimalFormat;
  2.  
  3. import org.osbot.script.Script;
  4. import org.osbot.script.rs2.skill.Skill;
  5. import org.osbot.script.rs2.skill.Skills;
  6.  
  7. /**
  8.  * @author Beau
  9.  *
  10.  * Handles the experience tracking for a skill.
  11.  */
  12. public class XPTracker {
  13.    
  14.     private final Script script;
  15.     private final Skill[] skills;
  16.     private double startExperience[], gainedExperience[];
  17.     private int startLevel[], gainedLevels[];
  18.     private long startTime, runTime;
  19.    
  20.     public XPTracker(Script script, Skill...skills) {
  21.         this.script = script;
  22.         this.skills = skills;
  23.         this.startExperience = new double[skills.length];
  24.         this.gainedExperience = new double[skills.length];
  25.         this.startLevel = new int[skills.length];
  26.         this.gainedLevels = new int[skills.length];
  27.     }
  28.    
  29.     /**
  30.      * Starts the xp tracker.
  31.      */
  32.     public void start() {
  33.         this.startTime = System.currentTimeMillis();
  34.         for (int i = 0; i < skills.length; i++) {
  35.             this.startExperience[i] = getSkillExperience(skills[i]);
  36.             this.startLevel[i] = getSkillLevel(skills[i]);
  37.         }
  38.     }
  39.    
  40.     /**
  41.      * Updates the xp tracker.
  42.      */
  43.     public void update() {
  44.         this.runTime = System.currentTimeMillis() - startTime;
  45.         for (int i = 0; i < skills.length; i++) {
  46.             this.gainedExperience[i] = getSkillExperience(skills[i]) - startExperience[i];
  47.             this.gainedLevels[i] = getSkillLevel(skills[i]) - startLevel[i];
  48.         }
  49.     }
  50.    
  51.     /**
  52.      * @return The experience gained per hour.
  53.      */
  54.     public double getExperiencePerHour(Skill skill) {
  55.         int index = indexOf(skill) == -1 ? 0 : indexOf(skill);
  56.         if (gainedExperience[index] > 0 && runTime > 0) {
  57.             return (int) (gainedExperience[index] * 3600000d / runTime);
  58.         } else {
  59.             return 0;
  60.         }
  61.     }
  62.    
  63.     /**
  64.      * @return The resources gained per hour.
  65.      */
  66.     public double getResourcePerHour(Skill skill, int resourceAmount) {
  67.         int index = indexOf(skill) == -1 ? 0 : indexOf(skill);
  68.         if (gainedExperience[index] > 0 && runTime > 0) {
  69.             return (int) (resourceAmount * 3600000d / runTime);
  70.         } else {
  71.             return 0;
  72.         }
  73.     }
  74.    
  75.     /**
  76.      * @param resourceXp The experience recieved from the resource.
  77.      * @return The resource amount left until level up.
  78.      */
  79.     public int getResourcesUntilLevel(Skill skill, double resourceXp) {
  80.         return (int) Math.ceil(getExperienceLeft(skill) / resourceXp);
  81.     }
  82.    
  83.     /**
  84.      * @return The experience left until level up.
  85.      */
  86.     public double getExperienceLeft(Skill skill) {
  87.         return getExperienceForLevel(getSkillLevel(skill) + 1) - getSkillExperience(skill);
  88.     }
  89.    
  90.     /**
  91.      * @param level The specified level.
  92.      * @return The experience required for the specified level.
  93.      */
  94.     public int getExperienceForLevel(int level) {
  95.         int points = 0, output = 0;
  96.         for (int lvl = 1; lvl <= level; lvl++) {
  97.             points += Math.floor(lvl + 300.0 * Math.pow(2.0, lvl / 7.0));
  98.             if (lvl >= level)
  99.                 return output;
  100.             output = (int) Math.floor(points / 4);
  101.         }
  102.         return 0;
  103.     }
  104.    
  105.     /**
  106.      * @return The percentage left of the skill in a decimal.
  107.      */
  108.     public double getPercentageLeft(Skill skill, boolean decimal) {
  109.         if (decimal)
  110.             return (getSkillExperience(skill) - getExperienceForLevel(getSkillLevel(skill)))
  111.                 / (getExperienceForLevel(getSkillLevel(skill) + 1) - getExperienceForLevel(getSkillLevel(skill)));
  112.         return getPercentageLeft(skill, true) * 100;
  113.     }
  114.    
  115.     /**
  116.      * Formats decimals to a double digit.
  117.      * Formats regular numbers with a comma.
  118.      * @param number The number to format.
  119.      * @return The formatted runmber in a string format.
  120.      */
  121.     public String formatNumber(double number) {
  122.         if (number % 1 != 0)
  123.             return new DecimalFormat("#.##").format(number);
  124.         return String.format("%,.0f", number);
  125.     }
  126.    
  127.     private int indexOf(Skill skill) {
  128.         for (int i = 0; i < skills.length; i++)
  129.             if (skills[i].equals(skill))
  130.                 return i;
  131.         return -1;
  132.     }
  133.  
  134.     public Skills getClientSkills() {
  135.         return script.client.getSkills();
  136.     }
  137.  
  138.     public Skill[] getSkills() {
  139.         return skills;
  140.     }
  141.  
  142.     public double getStartExperience(Skill skill) {
  143.         return startExperience[indexOf(skill) == -1 ? 0 : indexOf(skill)];
  144.     }
  145.  
  146.     public long getStartTime() {
  147.         return startTime;
  148.     }
  149.    
  150.     public long getRunTime() {
  151.         return runTime;
  152.     }
  153.  
  154.     public double getGainedExperience(Skill skill) {
  155.         return gainedExperience[indexOf(skill) == -1 ? 0 : indexOf(skill)];
  156.     }
  157.    
  158.     public double getSkillExperience(Skill skill) {
  159.         return script.client.getSkills().getExperience(skill);
  160.     }
  161.    
  162.     public int getSkillLevel(Skill skill) {
  163.         return script.client.getSkills().getLevel(skill);
  164.     }
  165.  
  166.     public Script getScript() {
  167.         return script;
  168.     }
  169.  
  170.     public int getStartLevel(Skill skill) {
  171.         return startLevel[indexOf(skill) == -1 ? 0 : indexOf(skill)];
  172.     }
  173.  
  174.     public int getGainedLevels(Skill skill) {
  175.         return gainedLevels[indexOf(skill) == -1 ? 0 : indexOf(skill)];
  176.     }
  177.  
  178. }
Advertisement
Add Comment
Please, Sign In to add comment