aboutsummaryrefslogtreecommitdiff
path: root/commands/calculate
diff options
context:
space:
mode:
authorNinjune <enderknight537@gmail.com>2022-12-07 21:36:53 -0600
committerNinjune <enderknight537@gmail.com>2022-12-07 21:36:53 -0600
commit1ffc0a89be42fcde95a04a87cc00dbc347b27ece (patch)
tree87ef5251d1fc2a32d495daa8f6a94e173c701f8e /commands/calculate
parent8ad19e54f6c3f44a84dd2565d910c207ffc5bc52 (diff)
downloadcoleweight-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.js47
-rw-r--r--commands/calculate/calculate.js36
-rw-r--r--commands/calculate/hotmCalc.js55
-rw-r--r--commands/calculate/tick.js66
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
+}