aboutsummaryrefslogtreecommitdiff
path: root/features/hud
diff options
context:
space:
mode:
authorSoopyboo32 <49228220+Soopyboo32@users.noreply.github.com>2021-10-31 09:49:42 +0800
committerSoopyboo32 <49228220+Soopyboo32@users.noreply.github.com>2021-10-31 09:49:42 +0800
commit48653ec89538f1650106a5e77463412cad4684c2 (patch)
tree09687cd579462e04d539fd4615369fa6dae13902 /features/hud
downloadSoopyV2-48653ec89538f1650106a5e77463412cad4684c2.tar.gz
SoopyV2-48653ec89538f1650106a5e77463412cad4684c2.tar.bz2
SoopyV2-48653ec89538f1650106a5e77463412cad4684c2.zip
first commit
Diffstat (limited to 'features/hud')
-rw-r--r--features/hud/HudTextElement.js77
-rw-r--r--features/hud/index.js315
-rw-r--r--features/hud/metadata.json8
3 files changed, 400 insertions, 0 deletions
diff --git a/features/hud/HudTextElement.js b/features/hud/HudTextElement.js
new file mode 100644
index 0000000..582b778
--- /dev/null
+++ b/features/hud/HudTextElement.js
@@ -0,0 +1,77 @@
+class HudTextElement{
+ constructor(){
+ this.text = ""
+
+ this.toggleSetting = undefined
+ this.locationSetting = undefined
+
+ this.blackText = "&0" + ChatLib.removeFormatting(this.text)
+
+ this.editTempTimeV = 0
+ this.editTempTextV = undefined
+
+ this.tempDisableTime = 0
+ }
+
+ setText(text){
+ this.text = text
+
+ if(this.locationSetting.shadowType === 2){
+ this.blackText = "&0" + ChatLib.removeFormatting(text)
+ }
+ return this
+ }
+ setToggleSetting(setting){
+ this.toggleSetting = setting
+ return this
+ }
+ setLocationSetting(setting){
+ this.locationSetting = setting
+ setting.setParent(this)
+ return this
+ }
+
+ render(){
+ if(this.toggleSetting && !this.toggleSetting.getValue() || !this.locationSetting) return
+ if(Date.now()-this.tempDisableTime < 100) return
+
+ this.renderRaw()
+ }
+
+ getText(){
+ let text = this.text
+ let blackText = this.blackText
+ if(this.editTempTextV && Date.now()-this.editTempTimeV < 100){
+ text = this.editTempTextV
+ blackText = "&0" + ChatLib.removeFormatting(text)
+ }
+ return [text.split("\n"), blackText.split("\n")]
+ }
+
+ renderRaw(){
+ let [text, blackText] = this.getText()
+
+ text.forEach((line, i)=>{
+ Renderer.scale(this.locationSetting.scale, this.locationSetting.scale)
+ switch(this.locationSetting.shadowType){
+ case 0:
+ Renderer.drawString(line, this.locationSetting.x/this.locationSetting.scale, this.locationSetting.y/this.locationSetting.scale +9*i)
+ break;
+ case 1:
+ Renderer.drawStringWithShadow(line, this.locationSetting.x/this.locationSetting.scale, this.locationSetting.y/this.locationSetting.scale +9*i)
+ break;
+ case 2:
+ Renderer.drawString(blackText[i], (this.locationSetting.x+1)/this.locationSetting.scale, this.locationSetting.y/this.locationSetting.scale +9*i)
+ Renderer.drawString(blackText[i], (this.locationSetting.x-1)/this.locationSetting.scale, this.locationSetting.y/this.locationSetting.scale +9*i)
+ Renderer.drawString(blackText[i], this.locationSetting.x/this.locationSetting.scale, (this.locationSetting.y+1)/this.locationSetting.scale +9*i)
+ Renderer.drawString(blackText[i], this.locationSetting.x/this.locationSetting.scale, (this.locationSetting.y-1)/this.locationSetting.scale +9*i)
+
+ Renderer.drawString(line, this.locationSetting.x/this.locationSetting.scale, this.locationSetting.y/this.locationSetting.scale +9*i)
+ break;
+ }
+ })
+ Renderer.scale(1, 1)
+ }
+}
+
+export default HudTextElement \ No newline at end of file
diff --git a/features/hud/index.js b/features/hud/index.js
new file mode 100644
index 0000000..b6db8c6
--- /dev/null
+++ b/features/hud/index.js
@@ -0,0 +1,315 @@
+/// <reference types="../../../CTAutocomplete" />
+/// <reference lib="es2015" />
+import SoopyNumber from "../../../guimanager/Classes/SoopyNumber";
+import Feature from "../../featureClass/class";
+import LocationSetting from "../settings/settingThings/location";
+import ToggleSetting from "../settings/settingThings/toggle";
+import HudTextElement from "./HudTextElement";
+
+class Hud extends Feature {
+ constructor() {
+ super()
+
+ this.initVariables()
+ }
+
+ initVariables(){
+
+ this.hudElements = []
+
+ this.fpsElement = undefined
+ this.cpsElement = undefined
+ this.soulflowElement = undefined
+ this.petElement = undefined
+ this.fpsEnabledSetting = undefined
+ this.cpsEnabledSetting = undefined
+ this.soulflowEnabledSetting = undefined
+ this.soulflowShowWarningSetting=undefined
+ this.soulflowShowWhen0Setting=undefined
+ this.petEnabledSetting=undefined
+ this.fpsFastSetting = undefined
+ this.fpsLowSetting = undefined
+ this.cpsSeperate =undefined
+ this.cpsIncludeRight =undefined
+
+ this.petLevels = undefined
+
+ this.lastTickTime = undefined
+ this.framesSince = undefined
+ this.lastframe = undefined
+ this.Instant = undefined
+
+ this.lastFrameRates = undefined
+
+ this.fps = undefined
+ this.lowFps = undefined
+
+ this.slowestFrameTime = undefined
+ this.lastFrameRatesS = undefined
+ this.numberUtils = undefined
+
+ this.petText = undefined
+ }
+
+ onEnable(){
+
+ this.numberUtils = require("../../utils/numberUtils.js")
+
+ this.fpsEnabledSetting = new ToggleSetting("Fps enabled", "Whether the fps is rendered onto the screen", true, "fps_enabled", this)
+ this.fpsFastSetting = new ToggleSetting("Fast fps update", "Whether the fps is updated fast instead of once per second", true, "fps_fast", this).requires(this.fpsEnabledSetting)
+ this.fpsLowSetting = new ToggleSetting("Low fps display", "Display the minumum frame time next to fps (usefull for finding framedrops)", true, "fps_low", this).requires(this.fpsFastSetting)
+
+ this.fpsElement = new HudTextElement()
+ .setToggleSetting(this.fpsEnabledSetting)
+ .setLocationSetting(new LocationSetting("Show FPS", "Allows you to edit the location of the fps text", "fps_location", this, [10, 10, 1, 1])
+ .requires(this.fpsEnabledSetting))
+ this.hudElements.push(this.fpsElement)
+
+ this.cpsEnabledSetting = new ToggleSetting("Show CPS", "Whether the cps is rendered onto the screen", true, "cps_enabled", this)
+ this.cpsIncludeRight = new ToggleSetting("CPS include right click", "Whether right clicks are shown in the CPS", true, "cps_right", this).requires(this.cpsEnabledSetting)
+ this.cpsSeperate = new ToggleSetting("CPS seperate right", "Seperates right clicks from left clicks", true, "cps_seperate", this).requires(this.cpsIncludeRight)
+
+ this.cpsElement = new HudTextElement()
+ .setToggleSetting(this.cpsEnabledSetting)
+ .setLocationSetting(new LocationSetting("Cps Location", "Allows you to edit the location of the cps text", "cps_location", this, [10, 20, 1, 1])
+ .requires(this.cpsEnabledSetting))
+ this.hudElements.push(this.cpsElement)
+
+ this.petEnabledSetting = new ToggleSetting("Show Current Pet", "Whether the current pet is rendered onto the screen", true, "pet_enabled", this)
+ this.petElement = new HudTextElement()
+ .setToggleSetting(this.petEnabledSetting)
+ .setLocationSetting(new LocationSetting("Pet Location", "Allows you to edit the location of the pet text", "pet_location", this, [10, 30, 1, 1])
+ .requires(this.petEnabledSetting))
+ this.hudElements.push(this.petElement)
+
+ this.soulflowEnabledSetting = new ToggleSetting("Show Soulflow", "Whether the soulflow count is rendered onto the screen", true, "soulflow_enabled", this)
+ this.soulflowShowWarningSetting = new ToggleSetting("Show no Talisman Warning", "Shows a warning if you dont have a soulflow talis in ur inv", true, "soulflow_notalis_warning", this).requires(this.soulflowEnabledSetting)
+ this.soulflowShowWhen0Setting = new ToggleSetting("Show When 0 Soulflow", "If this is off it wont render when you have 0 soulflow", true, "soulflow_showwhen_0", this).requires(this.soulflowEnabledSetting)
+ this.soulflowElement = new HudTextElement()
+ .setToggleSetting(this.soulflowEnabledSetting)
+ .setLocationSetting(new LocationSetting("Soulflow Location", "Allows you to edit the location of the soulflow text", "soulflow_location", this, [10, 40, 1, 1])
+ .requires(this.soulflowEnabledSetting))
+ this.hudElements.push(this.soulflowElement)
+
+ // this.showDragonDamages = new ToggleSetting("Show dragon damages", "This will render the top 3 damages + your damage during a dragon fight", true, "dragon_dmg_enable", this).requires(this.soulflowEnabledSetting)
+ // this.dragonDamageElement = new HudTextElement()
+ // .setToggleSetting(this.showDragonDamages)
+ // .setLocationSetting(new LocationSetting("Damage Location", "Allows you to edit the location of the damage leaderboard", "dragon_dmg_location", this, [50, 40, 1, 1])
+ // .requires(this.showDragonDamages)
+ // .editTempText("Test Line 1\nTest line 2\nTest line 3\nTest line 4 (longer KEKW)"))
+ // this.hudElements.push(this.dragonDamageElement)
+
+ this.step_5second()
+
+ this.lastTickTime = 0
+ this.framesSince = 0
+ this.lastframe = 0
+ this.slowestFrameTime = 0
+
+ this.lastFrameRates = [0,0,0,0,0,0,0,0,0,0]
+ this.lastFrameRatesS = [0,0,0,0,0,0,0,0,0,0]
+
+ this.Instant = Java.type("java.time.Instant");
+
+ this.fps = new SoopyNumber(0)
+ this.lowFps = new SoopyNumber(0)
+
+ this.registerEvent("renderOverlay", this.renderHud)
+ this.registerStep(true, 5, this.step)
+ this.registerStep(false, 5, this.step_5second)
+ this.registerEvent("renderWorld", this.renderWorld)
+
+ this.petLevels = {}
+ this.petText = ""
+ this.registerChat("&cAutopet &eequipped your ${pet}&e! &a&lVIEW RULE&r", (pet)=>{
+ this.petElement.setText("&6Pet&7> "+pet)
+ this.petText = "&6Pet&7> "+pet
+ })
+ this.registerChat("&r&aYou summoned your &r${pet}&r&a!&r", (pet)=>{
+ this.petElement.setText("&6Pet&7> &7[Lvl " + this.petLevels[pet.replace("&", "§")] +"] "+pet)
+ this.petText = "&6Pet&7> &7[Lvl " + this.petLevels[pet.replace("&", "§")] +"] "+pet
+ })
+ this.registerChat("&r&aYou despawned your &r${*}&r&a!&r", ()=>{
+ this.petElement.setText("&6Pet&7> &cNone")
+ this.petText = "&6Pet&7> &cNone"
+ })
+ this.registerChat("&r&aYour &r${pet} &r&alevelled up to level &r&9${level}&r&a!&r", (pet, level)=>{
+ this.petElement.setText("&6Pet&7> &7[Lvl " + level +"] "+pet)
+ this.petText = "&6Pet&7> &7[Lvl " + level +"] "+pet
+ })
+
+ this.registerSoopy("apiLoad", this.apiLoad)
+ if(this.FeatureManager.features["dataLoader"].class.lastApiData.skyblock){
+ this.apiLoad(this.FeatureManager.features["dataLoader"].class.lastApiData.skyblock, "skyblock", true, true)
+ }
+ }
+
+ onDisable(){
+ this.fpsEnabledSetting.delete()
+ this.fpsFastSetting.delete()
+ this.cpsEnabledSetting.delete()
+
+ this.initVariables()
+ }
+
+ renderHud(){
+
+ if(this.fpsFastSetting.getValue()){
+ if(this.fpsLowSetting.getValue()){
+ this.fpsElement.setText("&6Fps&7> &f" + Math.round(this.fps.get()) + "&7/" + Math.round(this.lowFps.get()))
+ }else{
+ this.fpsElement.setText("&6Fps&7> &f" + Math.round(this.fps.get()))
+ }
+ }
+
+ for(let element of this.hudElements){
+ element.render()
+ }
+ }
+
+ renderWorld(){
+ if(!this.fpsEnabledSetting.getValue() ||!this.fpsFastSetting.getValue()) return
+ this.framesSince++
+
+ let instant = this.Instant.now()
+ let time = instant.getEpochSecond() + (instant.getNano() / 1000000000);
+
+ let thisframeTime = time - this.lastFrame
+
+ if(thisframeTime > this.slowestFrameTime){
+ this.slowestFrameTime = thisframeTime
+ }
+
+ this.lastFrame = time
+ }
+
+ step(){
+ let fps = 0
+
+ if(this.fpsEnabledSetting.getValue() && this.fpsFastSetting.getValue()){
+ //set fps to fast fps
+ // console.log(`${this.framesSince} ${this.lastFrame-this.lastTickTime}`)
+ fps = this.framesSince/(this.lastFrame-this.lastTickTime)
+ if(this.lastFrame===this.lastTickTime) fps = 0
+ this.lastTickTime = this.lastFrame
+ this.framesSince = 0
+
+ this.lastFrameRates.push(fps)
+ this.lastFrameRates.shift()
+
+ if(this.slowestFrameTime > 0){
+ this.lastFrameRatesS.push(1/this.slowestFrameTime)
+ }else{
+ this.lastFrameRatesS.push(0)
+ }
+ this.lastFrameRatesS.shift()
+ this.slowestFrameTime = 0
+
+ fps = this.lastFrameRates.reduce((a,b) => a+b, 0) / this.lastFrameRates.length
+ this.fps.set(fps, 200)
+ if(this.fpsLowSetting.getValue()) this.lowFps.set(this.lastFrameRatesS.reduce((a,b) => a+b, 0) / this.lastFrameRatesS.length, 200)
+ }else{
+ fps = Client.getFPS()
+ this.fpsElement.setText("&6Fps&7> &f" + fps)
+ }
+
+ let cpsText = CPS.getLeftClicksAverage()
+
+ if(this.cpsIncludeRight.getValue()){
+ if(this.cpsSeperate.getValue()){
+ cpsText += "&7 | &f" + CPS.getRightClicksAverage()
+ }else{
+ cpsText += CPS.getRightClicksAverage()
+ }
+ }
+ this.cpsElement.setText("&6Cps&7> &f" + cpsText)
+
+ //Scan opened inventory for all pet levels
+ if(Player && Player.getOpenedInventory().getName().includes(") Pets")){
+ let inv = Player.getOpenedInventory().getItems()
+ for(let i = 0; i < inv.length; i++){
+ if(inv[i]!=null && inv[i].getName().includes("[Lvl ")){
+ let level = inv[i].getName().split(" ")[1].replace("]", "")
+ if(!this.petLevels[inv[i].getName().split("] ")[1]] || this.petLevels[inv[i].getName().split("] ")[1]] < level)this.petLevels[inv[i].getName().split("] ")[1]] = level
+ }
+ }
+ }
+ }
+
+ step_5second(){
+ if(!this.soulflowEnabledSetting.getValue()) return
+ if(!Player.getPlayer()) return
+ if(!Player.getInventory()) return
+
+ if(!this.FeatureManager.features["dataLoader"].class.isInSkyblock){
+ this.soulflowElement.setText("")
+ this.petElement.setText("")
+ return
+ }else{
+ this.petElement.setText(this.petText)
+ }
+
+ let soulflowCount = 0
+ let hasSoulflowItem = false
+ Player.getInventory().getItems().forEach(i=>{
+
+ let id;
+ try{
+ id = i.getNBT().getCompoundTag("tag").getCompoundTag("ExtraAttributes").getString("id")
+ }catch(e){}
+
+ if(id === "SOULFLOW_PILE" || id=== "SOULFLOW_BATTERY" || id === "SOULFLOW_SUPERCELL"){
+ //soulflowCount
+ i.getLore().forEach(line=>{
+ if(line.startsWith("§5§o§7Internalized:")){
+ hasSoulflowItem = true
+ soulflowCount = parseInt(ChatLib.removeFormatting(line).substr("Internalized: ".length).split("⸎")[0].replace(/,/g,""))
+ }
+ })
+ }
+ })
+ if(!hasSoulflowItem){
+ if(this.soulflowShowWarningSetting.getValue()){
+ this.soulflowElement.setText("&6Soulflow&7> &cNO TALISMAN")
+ }else{
+ this.soulflowElement.setText("")
+ }
+ return;
+ }
+ if(soulflowCount > 0 && !this.soulflowShowWhen0Setting.getValue()){
+ this.soulflowElement.setText("")
+ return;
+ }
+
+ this.soulflowElement.setText("&6Soulflow&7> &f" + this.numberUtils.numberWithCommas(soulflowCount))
+ }
+
+ apiLoad(data, dataType, isSoopyServer, isLatest){
+ if(!isSoopyServer || !isLatest) return
+ if(dataType !== "skyblock") return
+
+ let pet = data.data.profiles[data.data.stats.currentProfileId].members[Player.getUUID().replace(/-/g, "")].selectedPet
+
+ if(!pet){
+ this.petElement.setText("&6Pet&7> &cNone")
+ this.petText = "&6Pet&7> &cNone"
+ return;
+ }
+
+ let petTierColor = {
+ "COMMON": "&f",
+ "UNCOMMON": "&a",
+ "RARE": "&9",
+ "EPIC": "&5",
+ "LEGENDARY": "&6",
+ "MYTHIC": "&d"
+ }
+
+ this.petElement.setText("&6Pet&7> &7[Lvl " + pet.level.level + "] " + petTierColor[pet.tier] + pet.name)
+ this.petText = "&6Pet&7> &7[Lvl " + pet.level.level + "] " + petTierColor[pet.tier] + pet.name
+ }
+}
+
+module.exports = {
+ class: new Hud()
+} \ No newline at end of file
diff --git a/features/hud/metadata.json b/features/hud/metadata.json
new file mode 100644
index 0000000..67f5671
--- /dev/null
+++ b/features/hud/metadata.json
@@ -0,0 +1,8 @@
+{
+ "name": "Hud",
+ "description": "Adds a HUD with custom gui elements like fps, cps, equipped pet ect",
+ "isHidden": false,
+ "isTogglable": true,
+ "defaultEnabled": true,
+ "sortA": 2
+} \ No newline at end of file