aboutsummaryrefslogtreecommitdiff
path: root/commands/calculate
diff options
context:
space:
mode:
Diffstat (limited to 'commands/calculate')
-rw-r--r--commands/calculate/calculate.js7
-rw-r--r--commands/calculate/hotmCalc.js63
-rw-r--r--commands/calculate/tick.js80
3 files changed, 107 insertions, 43 deletions
diff --git a/commands/calculate/calculate.js b/commands/calculate/calculate.js
index cc4a006..8ed05bf 100644
--- a/commands/calculate/calculate.js
+++ b/commands/calculate/calculate.js
@@ -1,7 +1,7 @@
import constants from "../../util/constants"
import { hotmCalc } from "./hotmCalc"
import { calcSpeed } from "./calcSpeed"
-import { tick } from "./tick"
+import { tickCommand } from "./tick"
import { helpCommand } from "../help"
const PREFIX = constants.PREFIX
@@ -16,14 +16,15 @@ export function calculate(args)
hotmCalc(args[1], args[2], args[3])
break
case "tick":
- tick(args[1], args[2])
+ tickCommand(args[1], args[2])
break
case "calcspeed":
case "speed":
calcSpeed(args[1])
break
case "help":
- ChatLib.chat("&b--------------[ &a&l/cw calculate &b]--------------")
+ ChatLib.chat("&b--------------[ &a&l/cw calculate &b]------------")
+ ChatLib.chat("&7(Hover over command to see usage.)")
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]")
diff --git a/commands/calculate/hotmCalc.js b/commands/calculate/hotmCalc.js
index 415e7f4..7fa947c 100644
--- a/commands/calculate/hotmCalc.js
+++ b/commands/calculate/hotmCalc.js
@@ -5,28 +5,46 @@ const PREFIX = constants.PREFIX
export function hotmCalc(hotmName, minLevel, maxLevel)
{
- if(maxLevel == undefined)
+ if(hotmName == undefined)
{
- maxLevel = minLevel
- minLevel = 1
+ let hotmData = JSON.parse(FileLib.read("Coleweight", "data/hotm.json")).data
+
+ ChatLib.chat(`/cw calc hotm (hotmName listed below) (minLevel) [maxLevel]`)
+ for(let i = 0; i < hotmData.length; i++)
+ {
+ ChatLib.chat(hotmData[i].names[0])
+ }
+ return
}
+ new Thread(() => {
+ if(maxLevel == undefined)
+ {
+ maxLevel = minLevel
+ minLevel = 1
+ }
+
+ if(minLevel != parseInt(minLevel) || maxLevel != parseInt(maxLevel)) return ChatLib.chat(constants.CALCULATEERRORMESSAGE)
- 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}'!`)
- 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,
+ reward = findReward(hotmObjectToFind.rewardFormula, minLevel, maxLevel)
- maxLevel = (maxLevel < hotmObjectToFind.maxLevel ? maxLevel : hotmObjectToFind.maxLevel)
+ if(hotmObjectToFind.names[0] == "fortunate")
+ powderSum = findCost(undefined, minLevel, maxLevel, true)
+ else
+ powderSum = findCost(hotmObjectToFind.costFormula, minLevel, 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("")
+
+ 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("")
+ }).start()
}
export function findHotmObject(hotmName)
@@ -35,17 +53,22 @@ export function findHotmObject(hotmName)
for(let i = 0; i < hotmData.length; i++)
{
- if(hotmData[i].names.includes(hotmName))
+ if(hotmData[i].names.includes(hotmName.toLowerCase()))
return hotmData[i]
}
}
-export function findCost(costFormula, minLevel, maxLevel)
+export function findCost(costFormula, minLevel, maxLevel, fortunate = false)
{
let powderSum = 0
- for(let currentLevel = minLevel; currentLevel < maxLevel; currentLevel++) // finds cost
- powderSum += eval(costFormula.replace("currentLevel", currentLevel))
+ if(fortunate)
+ powderSum = Math.pow(maxLevel+1, 3.05)
+ else
+ {
+ for(let currentLevel = minLevel; currentLevel <= maxLevel; currentLevel++) // finds cost
+ powderSum += eval(costFormula.replace("currentLevel", currentLevel))
+ }
return powderSum
}
diff --git a/commands/calculate/tick.js b/commands/calculate/tick.js
index 5969710..674aa91 100644
--- a/commands/calculate/tick.js
+++ b/commands/calculate/tick.js
@@ -1,50 +1,86 @@
import constants from "../../util/constants"
const PREFIX = constants.PREFIX
-export function tick(speed, block)
+export function tickCommand(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
+ const ticks = findTick(speed, block)
+ if(ticks.err) return ChatLib.chat(`${PREFIX}&cBlock must be a gemstone or positive breaking power! (or starting letter of gemstone)`)
+
- if(currentBlockTick < Math.floor(currentBlockTick) + 0.5)
- nextBlockSpeed = strength*30/(Math.floor(currentBlockTick)-0.5)
+ ChatLib.chat(`\n&bCurrently mining blocks in &6&l${Math.round(ticks.currentBlockTick)} ticks` +
+ `\n&bCurrently mining shards in &6&l${Math.round(ticks.currentShardTick)} ticks` +
+ `\n&bNext block tick will be at: &6&l${Math.round(ticks.nextBlockSpeed)} mining speed` +
+ `\n&bNext shard tick will be at: &6&l${Math.round(ticks.nextShardSpeed)} mining speed` +
+ `\n&bYou need &6&l${Math.round(ticks.nextBlockSpeed - speed)} mining speed&b to get the next block tick.` +
+ `\n&bYou need &6&l${Math.round(ticks.nextShardSpeed - speed)} mining speed&b to get the next shard tick.\n`)
+}
+
+
+export function findTick(speed, block)
+{
+ let ticks = {err: false},
+ strength = findStrength(block),
+ tickStrength = strength-200
+
+ ticks.currentBlockTick = strength*30/speed
+ ticks.currentShardTick = tickStrength*30/speed
+
+ if(ticks.currentBlockTick < 4.5)
+ {
+ if(ticks.currentBlockTick > 0.5)
+ ticks.currentBlockTick = 4
+ }
+
+ if(ticks.currentShardTick < 4.5)
+ {
+ if(ticks.currentShardTick > 0.5)
+ ticks.currentShardTick = 4
+ }
+
+ if(strength < 1) return ticks.err = true
+
+
+ if(ticks.currentBlockTick < Math.floor(ticks.currentBlockTick) + 0.5)
+ ticks.nextBlockSpeed = strength*30/(Math.floor(ticks.currentBlockTick)-0.5)
else
- nextBlockSpeed = strength*30/(Math.floor(currentBlockTick)+0.5)
+ ticks.nextBlockSpeed = strength*30/(Math.floor(ticks.currentBlockTick)+0.5)
- if(currentShardTick < Math.floor(currentShardTick) + 0.5)
- nextShardSpeed = strength*30/(Math.floor(currentShardTick)-0.5)
+ if(ticks.currentShardTick < Math.floor(ticks.currentShardTick) + 0.5)
+ ticks.nextShardSpeed = strength*30/(Math.floor(ticks.currentShardTick)-0.5)
else
- nextShardSpeed = strength*30/(Math.floor(currentShardTick)+0.5)
+ ticks.nextShardSpeed = strength*30/(Math.floor(ticks.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`)
+ return ticks
}
function findStrength(block)
{
let strength = -1
- if(block == parseInt(block))
+ if(block == parseInt(block) && block > 5) // change if add block to tick speed blocks in settings
strength = block
else
{
- switch(block.toLowerCase())
+ switch(block.toString().toLowerCase())
{
+ case "0":
+ case "green_mithril":
+ strength = 800
+ break
+ case "1":
+ case "blue_mithril":
+ strength = 1500
+ break
+ case "2":
case "ruby":
case "r":
strength = 2500
break
+ case "3":
case "j":
case "jade":
case "a":
@@ -54,11 +90,15 @@ function findStrength(block)
case "sapphire":
strength = 3200
break
+ case "4":
case "t":
case "topaz":
case "o":
case "opal":
strength = 4000
+ case "5":
+ case "jasper":
+ strength = 5000
}
}