Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.text.DecimalFormat;
- import org.osbot.script.Script;
- import org.osbot.script.rs2.skill.Skill;
- import org.osbot.script.rs2.skill.Skills;
- /**
- * @author Beau
- *
- * Handles the experience tracking for a skill.
- */
- public class XPTracker {
- private final Script script;
- private final Skill[] skills;
- private double startExperience[], gainedExperience[];
- private int startLevel[], gainedLevels[];
- private long startTime, runTime;
- public XPTracker(Script script, Skill...skills) {
- this.script = script;
- this.skills = skills;
- this.startExperience = new double[skills.length];
- this.gainedExperience = new double[skills.length];
- this.startLevel = new int[skills.length];
- this.gainedLevels = new int[skills.length];
- }
- /**
- * Starts the xp tracker.
- */
- public void start() {
- this.startTime = System.currentTimeMillis();
- for (int i = 0; i < skills.length; i++) {
- this.startExperience[i] = getSkillExperience(skills[i]);
- this.startLevel[i] = getSkillLevel(skills[i]);
- }
- }
- /**
- * Updates the xp tracker.
- */
- public void update() {
- this.runTime = System.currentTimeMillis() - startTime;
- for (int i = 0; i < skills.length; i++) {
- this.gainedExperience[i] = getSkillExperience(skills[i]) - startExperience[i];
- this.gainedLevels[i] = getSkillLevel(skills[i]) - startLevel[i];
- }
- }
- /**
- * @return The experience gained per hour.
- */
- public double getExperiencePerHour(Skill skill) {
- int index = indexOf(skill) == -1 ? 0 : indexOf(skill);
- if (gainedExperience[index] > 0 && runTime > 0) {
- return (int) (gainedExperience[index] * 3600000d / runTime);
- } else {
- return 0;
- }
- }
- /**
- * @return The resources gained per hour.
- */
- public double getResourcePerHour(Skill skill, int resourceAmount) {
- int index = indexOf(skill) == -1 ? 0 : indexOf(skill);
- if (gainedExperience[index] > 0 && runTime > 0) {
- return (int) (resourceAmount * 3600000d / runTime);
- } else {
- return 0;
- }
- }
- /**
- * @param resourceXp The experience recieved from the resource.
- * @return The resource amount left until level up.
- */
- public int getResourcesUntilLevel(Skill skill, double resourceXp) {
- return (int) Math.ceil(getExperienceLeft(skill) / resourceXp);
- }
- /**
- * @return The experience left until level up.
- */
- public double getExperienceLeft(Skill skill) {
- return getExperienceForLevel(getSkillLevel(skill) + 1) - getSkillExperience(skill);
- }
- /**
- * @param level The specified level.
- * @return The experience required for the specified level.
- */
- public int getExperienceForLevel(int level) {
- int points = 0, output = 0;
- for (int lvl = 1; lvl <= level; lvl++) {
- points += Math.floor(lvl + 300.0 * Math.pow(2.0, lvl / 7.0));
- if (lvl >= level)
- return output;
- output = (int) Math.floor(points / 4);
- }
- return 0;
- }
- /**
- * @return The percentage left of the skill in a decimal.
- */
- public double getPercentageLeft(Skill skill, boolean decimal) {
- if (decimal)
- return (getSkillExperience(skill) - getExperienceForLevel(getSkillLevel(skill)))
- / (getExperienceForLevel(getSkillLevel(skill) + 1) - getExperienceForLevel(getSkillLevel(skill)));
- return getPercentageLeft(skill, true) * 100;
- }
- /**
- * Formats decimals to a double digit.
- * Formats regular numbers with a comma.
- * @param number The number to format.
- * @return The formatted runmber in a string format.
- */
- public String formatNumber(double number) {
- if (number % 1 != 0)
- return new DecimalFormat("#.##").format(number);
- return String.format("%,.0f", number);
- }
- private int indexOf(Skill skill) {
- for (int i = 0; i < skills.length; i++)
- if (skills[i].equals(skill))
- return i;
- return -1;
- }
- public Skills getClientSkills() {
- return script.client.getSkills();
- }
- public Skill[] getSkills() {
- return skills;
- }
- public double getStartExperience(Skill skill) {
- return startExperience[indexOf(skill) == -1 ? 0 : indexOf(skill)];
- }
- public long getStartTime() {
- return startTime;
- }
- public long getRunTime() {
- return runTime;
- }
- public double getGainedExperience(Skill skill) {
- return gainedExperience[indexOf(skill) == -1 ? 0 : indexOf(skill)];
- }
- public double getSkillExperience(Skill skill) {
- return script.client.getSkills().getExperience(skill);
- }
- public int getSkillLevel(Skill skill) {
- return script.client.getSkills().getLevel(skill);
- }
- public Script getScript() {
- return script;
- }
- public int getStartLevel(Skill skill) {
- return startLevel[indexOf(skill) == -1 ? 0 : indexOf(skill)];
- }
- public int getGainedLevels(Skill skill) {
- return gainedLevels[indexOf(skill) == -1 ? 0 : indexOf(skill)];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment