diff options
Diffstat (limited to 'src/features/lockedFeatures/index.js')
-rw-r--r-- | src/features/lockedFeatures/index.js | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/src/features/lockedFeatures/index.js b/src/features/lockedFeatures/index.js new file mode 100644 index 0000000..7557619 --- /dev/null +++ b/src/features/lockedFeatures/index.js @@ -0,0 +1,121 @@ +/// <reference types="../../../../CTAutocomplete" /> +/// <reference lib="es2015" /> +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) + } + + 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: §f" + 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) + } + + initVariables() { + + } + + onDisable() { + this.hudElements.forEach(h => h.delete()) + this.initVariables() + } +} + +module.exports = { + class: new LockedFeatures() +} |