aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/features/bestiary/index.js122
-rw-r--r--src/features/hud/index.js1
-rw-r--r--src/features/stat_next_to_name/index.js18
-rw-r--r--src/utils/statUtils.js57
4 files changed, 102 insertions, 96 deletions
diff --git a/src/features/bestiary/index.js b/src/features/bestiary/index.js
index da09463..8d00122 100644
--- a/src/features/bestiary/index.js
+++ b/src/features/bestiary/index.js
@@ -2,6 +2,8 @@
/// <reference lib="es2015" />
import Feature from "../../featureClass/class";
import { numberWithCommas } from "../../utils/numberUtils";
+import { getBestiaryTier } from "../../utils/statUtils";
+import { firstLetterWordCapital } from "../../utils/stringUtils";
import HudTextElement from "../hud/HudTextElement";
import DropdownSetting from "../settings/settingThings/dropdownSetting";
import LocationSetting from "../settings/settingThings/location";
@@ -25,23 +27,12 @@ class Bestiary extends Feature {
}
onEnable() {
- this.bestiaryData = JSON.parse(FileLib.read("soopyAddonsData", "bestiaryData.json") || "{}")
- this.bestiaryChanged = false
-
- this.bestiaryApiTracking = {}
-
- this.registerStep(true, 5, this.scanInv)
- this.registerStep(false, 5, this.saveData)
-
this.bestiaryStatTypes = {
"barbarian_duke_x": "Barbarian Duke X"
}
- Object.keys(this.bestiaryData).forEach(k => {
- if (this.bestiaryData[k].guiName) this.bestiaryStatTypes[k] = this.bestiaryData[k].guiName
- })
+ this.bestiaryData = {}
- new SettingBase("NOTE: u need to open ur bestiary menu", "before this will work", true, "info_bestiary", this)
this.hudStat = []
for (let i = 0; i < 10; i++) {
this.hudStat[i] = {}
@@ -105,8 +96,13 @@ class Bestiary extends Feature {
}
if (thing) {
- this.bestiaryData[thing].guessCount++
- this.bestiaryChanged = true
+ this.bestiaryData[thing].totalKills++
+
+ let { level, killsLeft, killsForNext } = getBestiaryTier(thing, this.bestiaryData[thing].totalKills)
+
+ this.bestiaryData[thing].tier = level
+ this.bestiaryData[thing].killsThisTier = killsLeft
+ this.bestiaryData[thing].killsForNext = killsForNext
}
})
this.registerSoopy("apiLoad", this.apiLoad);
@@ -118,17 +114,8 @@ class Bestiary extends Feature {
getBestiaryCount(id) {
if (!this.bestiaryData[id]) return "???"
- let count = this.bestiaryData[id].count
-
- if (!dontUseApi.has(id)) {
- let currApiData = this.bestiaryApiTracking[id]
-
- count += currApiData - this.bestiaryData[id].apiCount
- }
-
- count += this.bestiaryData[id].guessCount
- return count
+ return `${this.bestiaryData[id].tier}&7:&f ${this.bestiaryData[id].killsThisTier}&7/&f${this.bestiaryData[id].killsForNext}`
}
updateHudElements() {
@@ -145,7 +132,7 @@ class Bestiary extends Feature {
let type = stat.type.getValue()
- stat.textElement.setText(`&6${this.bestiaryData[type]?.guiName}&7> &f${numberWithCommas(this.getBestiaryCount(type))}`)
+ stat.textElement.setText(`&6${this.bestiaryStatTypes[type]}&7> &f${numberWithCommas(this.getBestiaryCount(type))}`)
} else {
stat.textElement.setText("")
}
@@ -166,84 +153,45 @@ class Bestiary extends Feature {
}
})
- Object.keys(currentProfile.stats).forEach(key => {
- if (key.startsWith("kills_")) {
- this.bestiaryApiTracking[key.replace("kills_", "")] = currentProfile.stats[key]
- }
- })
- }
-
- scanInv() {
- if (!Player.getContainer()) return
- if (!Player.getContainer().getName().startsWith("Bestiary ➜ ")) return
- let tempChanged = false
- let seen = new Set()
-
- for (let item of Player.getContainer().getItems()) {
- if (!item) continue
- let name = ChatLib.removeFormatting(item.getName()).split(" ")
- name.pop()
- let apiName = name.join("_").toLowerCase()
- if (seen.has(apiName)) continue
- seen.add(apiName)
-
- if (apiName === "skeletor_prime") continue
-
- if (this.bestiaryApiTracking[apiName] || dontUseApi.has(apiName)) {
+ Object.entries(currentProfile.bestiary).forEach(([key, val]) => {
+ if (key.startsWith("kills_family_")) {
+ let family = key.replace("kills_family_", "")
- let count = 0
-
- for (let l of item.getLore()) {
- l = ChatLib.removeFormatting(l)
-
- if (l.startsWith("Kills: ")) {
- count = parseInt(l.split("Kills: ")[1].replace(/,/g, ""))
- break;
+ if (!this.bestiaryData[family]) {
+ this.bestiaryData[family] = {
+ tier: 0,
+ totalKills: 0,
+ killsThisTier: 0,
+ killsForNext: 0
}
}
- let needsChange = !this.bestiaryData[apiName] || this.bestiaryData[apiName].guiName !== name.join(" ") || this.bestiaryData[apiName].count !== count || this.bestiaryData[apiName].apiCount !== (this.bestiaryApiTracking[apiName] || 0) || this.bestiaryData[apiName].guessCount !== 0
- if (needsChange) {
- this.bestiaryData[apiName] = {
- guiName: name.join(" "),
- count,
- apiCount: this.bestiaryApiTracking[apiName] || 0,
- guessCount: 0
- }
- this.bestiaryChanged = true
+ this.bestiaryData[family].totalKills = val
- tempChanged = true
+ let { level, killsLeft, killsForNext } = getBestiaryTier(family, val)
- }
+ this.bestiaryData[family].tier = level
+ this.bestiaryData[family].killsThisTier = killsLeft
+ this.bestiaryData[family].killsForNext = killsForNext
}
- }
-
- if (tempChanged) {
- this.bestiaryStatTypes = {}
- Object.keys(this.bestiaryData).forEach(k => {
- if (this.bestiaryData[k]?.guiName) this.bestiaryStatTypes[k] = this.bestiaryData[k].guiName
- })
-
+ })
+ let changed = false
+ Object.keys(this.bestiaryData).forEach(k => {
+ if (!this.bestiaryStatTypes[k]) {
+ this.bestiaryStatTypes[k] = firstLetterWordCapital(k.replace(/_/g, " "))
+ changed = true
+ }
+ })
+ if (changed) {
this.hudStat.forEach(s => {
s.type.dropdownObject.setOptions(this.bestiaryStatTypes)
})
-
- this.updateHudElements()
- }
- start = Date.now()
- }
-
- saveData() {
- if (this.bestiaryChanged) {
- FileLib.write("soopyAddonsData", "bestiaryData.json", JSON.stringify(this.bestiaryData))
}
}
onDisable() {
this.hudStat.forEach(h => h.textElement.delete())
- this.saveData()
}
-
}
module.exports = {
class: new Bestiary()
diff --git a/src/features/hud/index.js b/src/features/hud/index.js
index f4d7e16..f1cfa33 100644
--- a/src/features/hud/index.js
+++ b/src/features/hud/index.js
@@ -676,6 +676,7 @@ class Hud extends Feature {
updatePotsData(data) {
this.potsExpireAt = {}
let now = Date.now()
+ if (Date.now() - data.last_save < 5 * 60000) now = data.last_save
data.active_effects.forEach(e => {
this.potsExpireAt[e.effect] = {
level: e.level,
diff --git a/src/features/stat_next_to_name/index.js b/src/features/stat_next_to_name/index.js
index 2045db5..3845b66 100644
--- a/src/features/stat_next_to_name/index.js
+++ b/src/features/stat_next_to_name/index.js
@@ -6,6 +6,7 @@ import SettingBase from "../settings/settingThings/settingBase";
import * as numberUtils from "../../utils/numberUtils";
import DropdownSetting from "../settings/settingThings/dropdownSetting";
import ToggleSetting from "../settings/settingThings/toggle";
+import NonPooledThread from "../../utils/nonPooledThread";
class StatNextToName extends Feature {
constructor() {
@@ -73,12 +74,19 @@ class StatNextToName extends Feature {
})
let keyValid = false
- let key = this.FeatureManager.features["globalSettings"].class.apiKeySetting.getValue()
- fetch("https://api.hypixel.net/key?key=" + key).json().then(d => {
- if (d.success) {
- keyValid = true
+ let key = undefined
+ new NonPooledThread(() => {
+ while (!this.FeatureManager.features["globalSettings"]?.class) {
+ Thread.sleep(1000)
}
- })
+
+ key = this.FeatureManager.features["globalSettings"].class.apiKeySetting.getValue()
+ fetch("https://api.hypixel.net/key?key=" + key).json().then(d => {
+ if (d.success) {
+ keyValid = true
+ }
+ })
+ }).start()
}
loadPlayerStatsTick() {
diff --git a/src/utils/statUtils.js b/src/utils/statUtils.js
index 89b467d..f827454 100644
--- a/src/utils/statUtils.js
+++ b/src/utils/statUtils.js
@@ -1,13 +1,62 @@
let utils = {
- getHotmLevel: getHotmLevel,
- getDungeoneeringLevel: getDungeoneeringLevel,
- getPetLevel: getPetLevel,
- getLevelByXp: getLevelByXp,
+ getHotmLevel,
+ getDungeoneeringLevel,
+ getPetLevel,
+ getLevelByXp,
+ getBestiaryTier
}
module.exports = utils
+let bossmobs = new Set()
+bossmobs.add("dragon")
+bossmobs.add("arachne")
+bossmobs.add("headless_horseman")
+bossmobs.add("magma_cube_boss")
+bossmobs.add("arachne")
+bossmobs.add("barbarian_duke_x")
+bossmobs.add("bladesoul")
+bossmobs.add("mage_outlaw")
+bossmobs.add("ashfang")
+bossmobs.add("corrupted_protector")
+
+let islandmobs = new Set()
+islandmobs.add("cave_spider")
+islandmobs.add("enderman_private")
+islandmobs.add("skeleton")
+islandmobs.add("slime")
+islandmobs.add("spider")
+islandmobs.add("witch")
+islandmobs.add("zombie")
+
+let bestiaryData = {
+ mob: [10, 15, 75, 150, 250, 500, 1500, 2500, 5000, 15000, 25000, 50000, ...(new Array(42 - 13).fill(100000))],
+ boss: [2, 3, 5, 10, 10, 10, 10, 25, 25, 50, 50, 100, ...(new Array(42 - 13).fill(100))],
+ private: [10, 15, 75, 150, 250]
+}
+
+function getBestiaryTier(family, kills) {
+ let type = "mob"
+
+ if (islandmobs.has(family)) type = "private"
+ if (bossmobs.has(family)) type = "boss"
+
+ let killsLeft = kills
+ let data = bestiaryData[type]
+
+ let dataI = 0
+ while (dataI < data.length && killsLeft >= data[dataI]) {
+ killsLeft -= data[dataI]
+ dataI++
+ }
+
+ return {
+ level: dataI,
+ killsLeft,
+ killsForNext: data[dataI] || null
+ }
+}
let someData = {
leveling_xp: {
1: 50,