Module:Heart of the Mountain

-- local p = {}

local getArgs = require('Module:Arguments').getArgs require('Module:LibraryUtil') local string = require('Module:String') local title = mw.title.getCurrentTitle.fullText local lang = mw.language.getContentLanguage

-- Invoked directly by Template:Calculator/HotM_perk_powder function p.calcPowderCostForLevel(frame) local args = getArgs(frame) local perk = args[1] or args["perk"] local target = args[2] or args["target"] or args["to"] assertTrue(perk, "perk must be specified", 0) assertTrue(target, "Must specify a target level", 0) return p._calcPowderCostForLevel(perk, target) end

function p._calcPowderCostForLevel(perk, target) checkType(1, perk, 'string') checkType(2, target, 'number', true) perk = perk:lower local functionData = { ["crystallized"] =			function(n) return math.floor(math.pow(n+1, 3.4)) end, ["daily powder"] =			function(n) return 182 + 18 * n end, ["efficient miner"] =		function(n) return math.floor(math.pow(n+1, 2.6)) end, ["luck of the cave"] =		function(n) return math.floor(math.pow(n+1, 3.07)) end, ["mining fortune"] =		function(n) return math.floor(math.pow(n+1, 3.05)) end, ["mining speed"] =			function(n) return math.floor(math.pow(n+1, 3)) end, ["orbiter"]	=				function(n) return 70 * n end, ["peak of the mountain"] =	function(n) return 25000 * n end, ["quick forge"]	=			function(n) return math.floor(math.pow(n+1, 4)) end, ["seasoned mineman"] =		function(n) return math.floor(math.pow(n+1, 2.3)) end, ["titanium insanium"] = 	function(n) return math.floor(math.pow(n+1, 3.1)) end, }	local calc = functionData[perk] assertTrue(calc, "Invalid perk name specified %q", 0, perk) local powder = 0 for i = 2,target,1 do 		powder = powder + calc(i) end return powder end

-- Invoked directly by Fetchur -- Not really HotM related, but semi related and didn't feel like making a new module function p.currentFetchurFetchQuest(frame) local args = getArgs(frame) -- Fetch Quest is based on current day local ts = "-4 hours" -- This timestamp value is required to have result shown based on hypixel day reset instead of UTC local day = lang:formatDate("j",ts) local items = { { "Mithril", 20, name="Mithril" }, { "Firework Rocket", 1, name="Firework Rocket" }, { "Cheap Coffee", 1, name="Cheap Coffee or Decent Coffee" }, { "Oak Door", 1, name="Any Wooden Door or Iron Door" }, { "Rabbit's Foot", 3, name="Rabbit's Foot" }, { "Superboom TNT", 1, name="Superboom TNT" }, { "Pumpkin", 1, name="Pumpkin" }, { "Flint and Steel", 1, name="Flint and Steel" }, { "Nether Quartz Ore", 50, name="Nether Quartz Ore" }, { "Ender Pearl", 16, name="Ender Pearl" }, { "Red Wool", 50, name="Red Wool" }, { "Yellow Stained Glass", 20, name="Yellow Stained Glass" }, { "Compass", 1, name="Compass" }, }	local i = day%(#items) if i == 0 then i = #items end local item = items[i] return mw.html.create('div') :css{ ['overflox-x']='hidden'; }		:tag('big') :css{ ['display'] = 'block'; ['border'] = '2px solid #ed9a01'; ['padding'] = '10px'; ['text-align'] = 'center'; }			:tag('small') :addClass('plainlinks') :wikitext(lang:formatDate("l",ts), " Results",						" (", string.fullUrl(title, { action="purge" }, "refresh"), ")"					) :done :tag('hr'):done :wikitext(item[2], 'x', string.makeImage(item[1], { ext='png', size='x24px', link=item[1] }), ' ', item.name or item[1]) :done :done :done end

return p