diff options
author | Ninjune <enderknight537@gmail.com> | 2022-12-07 21:36:53 -0600 |
---|---|---|
committer | Ninjune <enderknight537@gmail.com> | 2022-12-07 21:36:53 -0600 |
commit | 1ffc0a89be42fcde95a04a87cc00dbc347b27ece (patch) | |
tree | 87ef5251d1fc2a32d495daa8f6a94e173c701f8e /commands/calculate | |
parent | 8ad19e54f6c3f44a84dd2565d910c207ffc5bc52 (diff) | |
download | coleweight-1ffc0a89be42fcde95a04a87cc00dbc347b27ece.tar.gz coleweight-1ffc0a89be42fcde95a04a87cc00dbc347b27ece.tar.bz2 coleweight-1ffc0a89be42fcde95a04a87cc00dbc347b27ece.zip |
v1.7.0v1.7.0
Diffstat (limited to 'commands/calculate')
-rw-r--r-- | commands/calculate/calcSpeed.js | 47 | ||||
-rw-r--r-- | commands/calculate/calculate.js | 36 | ||||
-rw-r--r-- | commands/calculate/hotmCalc.js | 55 | ||||
-rw-r--r-- | commands/calculate/tick.js | 66 |
4 files changed, 204 insertions, 0 deletions
diff --git a/commands/calculate/calcSpeed.js b/commands/calculate/calcSpeed.js new file mode 100644 index 0000000..1b2eae6 --- /dev/null +++ b/commands/calculate/calcSpeed.js @@ -0,0 +1,47 @@ +import constants from "../../util/constants" +import { parseNotatedInput } from "../../util/helperFunctions" +const PREFIX = constants.PREFIX + + +export function calcSpeed(powder) +{ + let speedLevels = 1, + professionalLevels = 1 + + if(powder == undefined || parseNotatedInput(powder) == "NI") return ChatLib.chat(constants.CALCULATEERRORMESSAGE) + powder = parseNotatedInput(powder) + + while(powder > msPowder(speedLevels) + profPowder(professionalLevels)) + { + if(ms2SpeedPerPowder(speedLevels + 1) > professionalSpeedPerPowder(professionalLevels + 1) && speedLevels < 50) + { + powder -= msPowder(speedLevels++) + } + else if (professionalLevels < 140) + { + powder -= profPowder(professionalLevels++) + } + else break + } + return ChatLib.chat(`&bGet &6&l${speedLevels} &bmining speed levels and &6&l${professionalLevels} &bprofessional levels.`) +} + +function ms2SpeedPerPowder(miningSpeedLevel) // 40 speed per level +{ + return 40/msPowder(miningSpeedLevel) +} + +function professionalSpeedPerPowder(professionalLevel) // 5 speed per level +{ + return 5/profPowder(professionalLevel) +} + +function msPowder(miningSpeedLevel) +{ + return Math.floor(Math.pow(miningSpeedLevel+1, 3.2)) +} + +function profPowder(professionalLevel) +{ + return Math.floor(Math.pow(professionalLevel+1, 2.3)) +}
\ No newline at end of file diff --git a/commands/calculate/calculate.js b/commands/calculate/calculate.js new file mode 100644 index 0000000..cc4a006 --- /dev/null +++ b/commands/calculate/calculate.js @@ -0,0 +1,36 @@ +import constants from "../../util/constants" +import { hotmCalc } from "./hotmCalc" +import { calcSpeed } from "./calcSpeed" +import { tick } from "./tick" +import { helpCommand } from "../help" +const PREFIX = constants.PREFIX + + +export function calculate(args) +{ + switch(args[0].toLowerCase()) + { + case "hotm": + case "hotmcalc": + case "calchotm": + hotmCalc(args[1], args[2], args[3]) + break + case "tick": + tick(args[1], args[2]) + break + case "calcspeed": + case "speed": + calcSpeed(args[1]) + break + case "help": + ChatLib.chat("&b--------------[ &a&l/cw calculate &b]--------------") + helpCommand("calculate tick", "Calculates tick data.", "(mining speed) (('r','jade', etc) || breaking power of block))") + helpCommand("calculate speed", "Calculates the ratio of mining speed 2 to professional with a certain amount of powder.", "(powder)") + helpCommand("calculate hotm", "Calculates powder between two levels of a certain perk.", "(perk) (minlevel) [maxlevel]") + ChatLib.chat("&b------------------------------------------") + return + default: + return ChatLib.chat(constants.CALCULATEERRORMESSAGE) + } +} + diff --git a/commands/calculate/hotmCalc.js b/commands/calculate/hotmCalc.js new file mode 100644 index 0000000..415e7f4 --- /dev/null +++ b/commands/calculate/hotmCalc.js @@ -0,0 +1,55 @@ +import constants from "../../util/constants" +import { addCommas } from "../../util/helperFunctions" +const PREFIX = constants.PREFIX + + +export function hotmCalc(hotmName, minLevel, maxLevel) +{ + if(maxLevel == undefined) + { + maxLevel = minLevel + minLevel = 1 + } + + if(minLevel != parseInt(minLevel) || maxLevel != parseInt(maxLevel)) return ChatLib.chat(constants.CALCULATEERRORMESSAGE) + + minLevel = parseInt(minLevel) + maxLevel = parseInt(maxLevel) + let hotmObjectToFind = findHotmObject(hotmName) + if(hotmObjectToFind == undefined) return ChatLib.chat(`${PREFIX}&cDid not find HOTM perk with name '${hotmName}'!`) + + maxLevel = (maxLevel < hotmObjectToFind.maxLevel ? maxLevel : hotmObjectToFind.maxLevel) + + let powderSum = findCost(hotmObjectToFind.costFormula, minLevel, maxLevel), + reward = findReward(hotmObjectToFind.rewardFormula, minLevel, maxLevel) + + ChatLib.chat("") + ChatLib.chat(`&6${hotmObjectToFind.nameStringed} ${minLevel} - ${maxLevel} &bwill cost &6&l${addCommas(Math.round(powderSum))} &6${hotmObjectToFind.powderType[0].toUpperCase() + hotmObjectToFind.powderType.slice(1)} &bpowder.`) + ChatLib.chat(`&6${hotmObjectToFind.nameStringed} ${minLevel} - ${maxLevel} &bwill give &6&l${addCommas(Math.round(reward * 100) / 100)} &bof whatever reward is listed.`) + ChatLib.chat("") +} + +export function findHotmObject(hotmName) +{ + let hotmData = JSON.parse(FileLib.read("Coleweight", "data/hotm.json")).data + + for(let i = 0; i < hotmData.length; i++) + { + if(hotmData[i].names.includes(hotmName)) + return hotmData[i] + } +} + +export function findCost(costFormula, minLevel, maxLevel) +{ + let powderSum = 0 + + for(let currentLevel = minLevel; currentLevel < maxLevel; currentLevel++) // finds cost + powderSum += eval(costFormula.replace("currentLevel", currentLevel)) + return powderSum +} + +export function findReward(rewardFormula, minLevel, maxLevel) +{ + return eval(rewardFormula.replace("Level", 1+maxLevel-minLevel)) +}
\ No newline at end of file diff --git a/commands/calculate/tick.js b/commands/calculate/tick.js new file mode 100644 index 0000000..5969710 --- /dev/null +++ b/commands/calculate/tick.js @@ -0,0 +1,66 @@ +import constants from "../../util/constants" +const PREFIX = constants.PREFIX + +export function tick(speed, block) +{ + if(speed == undefined || parseInt(speed) != speed) + return ChatLib.chat(`${PREFIX}&cMining speed must be an integer!`) + if(block == undefined) + return ChatLib.chat(constants.CALCULATEERRORMESSAGE) + let strength = findStrength(block) + if(strength < 1) return ChatLib.chat(`${PREFIX}&cBlock must be a gemstone or positive breaking power! (or starting letter of gemstone)`) + let currentBlockTick = strength*30/speed, + currentShardTick = (strength-200)*30/speed, + nextBlockSpeed, nextShardSpeed + + if(currentBlockTick < Math.floor(currentBlockTick) + 0.5) + nextBlockSpeed = strength*30/(Math.floor(currentBlockTick)-0.5) + else + nextBlockSpeed = strength*30/(Math.floor(currentBlockTick)+0.5) + + if(currentShardTick < Math.floor(currentShardTick) + 0.5) + nextShardSpeed = strength*30/(Math.floor(currentShardTick)-0.5) + else + nextShardSpeed = strength*30/(Math.floor(currentShardTick)+0.5) + + ChatLib.chat(`\n&bCurrently mining blocks in &6&l${Math.round(currentBlockTick)} ticks` + + `\n&bCurrently mining shards in &6&l${Math.round(currentShardTick)} ticks` + + `\n&bNext block tick will be at: &6&l${Math.round(nextBlockSpeed)} mining speed` + + `\n&bNext shard tick will be at: &6&l${Math.round(nextShardSpeed)} mining speed` + + `\n&bYou need &6&l${Math.round(nextBlockSpeed - speed)} mining speed&b to get the next block tick.` + + `\n&bYou need &6&l${Math.round(nextShardSpeed - speed)} mining speed&b to get the next shard tick.\n`) +} + +function findStrength(block) +{ + let strength = -1 + + if(block == parseInt(block)) + strength = block + else + { + switch(block.toLowerCase()) + { + case "ruby": + case "r": + strength = 2500 + break + case "j": + case "jade": + case "a": + case "amber": + case "amethyst": + case "s": + case "sapphire": + strength = 3200 + break + case "t": + case "topaz": + case "o": + case "opal": + strength = 4000 + } + } + + return strength +} |