/// /// import Feature from "../../featureClass/class"; import ToggleSetting from "../settings/settingThings/toggle"; import SoopyV2Server from "../../socketConnection" import HudTextElement from "../hud/HudTextElement"; import LocationSetting from "../settings/settingThings/location"; import { numberWithCommas, timeNumber2, timeSince } from "../../utils/numberUtils"; import FakeRequireToggle from "../settings/settingThings/FakeRequireToggle"; class LockedFeatures extends Feature { constructor() { super() } onEnable() { this.initVariables() this.guildEventLbPossible = new FakeRequireToggle(false) this.guildEventLb = new ToggleSetting("Guild event leaderboard", "A gui element for guild leaderboard progress", true, "guild_event_lb", this).requires(this.guildEventLbPossible) this.hudElements = [] this.guildLbElement = new HudTextElement() .setToggleSetting(this.guildEventLb) .setLocationSetting(new LocationSetting("Guild Lb Location", "Allows you to edit the location of the guild leaderboard", "guild_lb_location", this, [50, 40, 1, 1]) .requires(this.guildEventLb)) this.hudElements.push(this.guildLbElement) this.eventCommand = undefined this.registerStep(true, 1, this.step) this.registerEvent("renderOverlay", this.renderOverlay).registeredWhen(() => this.guildEventLb.getValue()) } step() { if (!SoopyV2Server.lbdatathing) { this.guildEventLbPossible.set(false) if (this.eventCommand) { this.eventCommand.unregister() this.eventCommand = undefined } return; } this.guildEventLbPossible.set(true) if (!this.eventCommand) { this.eventCommand = this.registerCommand("eventlb", () => { SoopyV2Server.lbdatathing.forEach((u, i) => { let text = "" text += "§6#" + (i + 1) text += "§7 - " text += "§e" + u.username text += "&7: §r" + numberWithCommas(Math.round(parseFloat(u.startingAmount))) if (u.progress) text += " §7(" + (u.progress > 0 ? "+" : "-") + Math.abs(Math.round(u.progress)) + "/h)" ChatLib.chat(text) }) }) } if (!this.guildEventLb.getValue()) return let text = "" let playerPos = 0 SoopyV2Server.lbdatathing.forEach((u, i) => { if (u.uuid === Player.getUUID().toString().replace(/-/g, "")) playerPos = i }) let prevProgress let playerProgress let nextProgress SoopyV2Server.lbdatathing.forEach((u, i) => { if (i === playerPos - 1) nextProgress = [parseFloat(u.startingAmount), u.progress] if (i === playerPos) playerProgress = [parseFloat(u.startingAmount), u.progress] if (i === playerPos + 1) prevProgress = [parseFloat(u.startingAmount), u.progress] if (i === playerPos - 1 || i === playerPos || i === playerPos + 1 || (playerPos === 0 && i === playerPos + 2)) { text += "§6#" + (i + 1) text += "§7 - " text += "§e" + u.username text += "&7: §r" + numberWithCommas(Math.round(parseFloat(u.startingAmount))) if (u.progress) text += " §7(" + (u.progress > 0 ? "+" : "-") + Math.abs(Math.round(u.progress)) + "/h)" text += "\n" } }) text += "&dLast updated " + timeSince(SoopyV2Server.lbdatathingupdated) + " ago" let timeTillIncrease = Infinity let timeTillDecrease = Infinity if (nextProgress && nextProgress[1] - playerProgress[1] < 0) { timeTillIncrease = ((nextProgress[0] - playerProgress[0]) / (playerProgress[1] - nextProgress[1]) * 60 * 60 * 1000) } if (prevProgress && prevProgress[1] - playerProgress[1] < 0) { timeTillDecrease = ((playerProgress[0] - prevProgress[0]) / (prevProgress[1] - playerProgress[1]) * 60 * 60 * 1000) } if ((timeTillIncrease < timeTillDecrease || (timeTillIncrease > 0)) && timeTillDecrease < 0 && timeTillIncrease < 10000000000) { text = "&d ^ in " + timeNumber2(timeTillIncrease) + "\n" + text } if ((timeTillIncrease > timeTillDecrease || (timeTillDecrease > 0)) && timeTillIncrease < 0 && timeTillDecrease < 10000000000) { text = "&d v in " + timeNumber2(timeTillDecrease) + "\n" + text } this.guildLbElement.setText(text) } renderOverlay() { this.hudElements.forEach(a => a.render()) } initVariables() { } onDisable() { this.initVariables() } } module.exports = { class: new LockedFeatures() }