Module:MoneyMakingGuide: Difference between revisions

From Melvor Idle
(Add table creation (still empty))
m (Fill more of table)
Line 12: Line 12:
local ValueSuffix = 'value'
local ValueSuffix = 'value'
local SkillPrefix = 'skillExp'
local SkillPrefix = 'skillExp'
-- Determines the order of Icons
local DLCParams = {  
local DLCParams = {  
toth  = 'melvorTotH',
aod = 'melvorAoD',  
aod = 'melvorAoD',  
toth  = 'melvorTotH',
ita = 'melvorItA'
ita = 'melvorItA'
}
}
Line 136: Line 138:
         :tag("td")
         :tag("td")
             :attr("colspan", 2)
             :attr("colspan", 2)
             :wikitext("<ActivityName>")
             :wikitext('dlcIcon')
            :wikitext(args['guideName'] or '{{{guideName}}}')
     :tag("tr")
     :tag("tr")
         :tag("th")
         :tag("th")
Line 186: Line 189:
end
end


--- Returns the parsed result of the dlcArgs.
--- Returns the parsed result of the dlcParam.
-- @param dlcArgs (string) A string separated by , listing the DLCs required for the MMG
-- @param dlcParam (string) A string separated by , listing the DLCs required for the MMG
-- @return (table) A table listing which DLCs are required.
-- @return (table) A table containing the items of provided DLCs
function p.parseDLC(dlcArgs)
function p.getDLCIcons(dlcParam)
if type(dlcArgs) ~= 'string' then return {} end
if type(dlcParam) ~= 'string' then return {} end


local dlcs = {}
local dlcs = {}
for _, arg in pairs(shared.splitString(dlcArgs, ',')) do
for _, arg in pairs(shared.splitString(dlcArgs, ',')) do
for dlc, ns in pairs(DLCParams) do
for dlc, icon in pairs(DLCParams) do
if shared.compareString(dlc, arg, true) then
if shared.compareString(dlc, arg, true) then
table.insert(dlcs, ns)
table.insert(dlcs, icon)
end
end
end
end

Revision as of 18:07, 21 March 2024

Documentation for this module may be created at Module:MoneyMakingGuide/doc

local p = {}

local shared = require('Module:Shared')
local num = require('Module:Number')
local paramtest = require('Module:Shared/Paramtest')
local itemdb = require('Module:Items')
local icons = require('Module:Icons')

-- Constants
local MaxDynamicArgs = 20
local AmountSuffix = 'amount'
local ValueSuffix = 'value'
local SkillPrefix = 'skillExp'

-- Determines the order of Icons
local DLCParams = { 
	toth  = 'melvorTotH', 
	aod = 'melvorAoD', 
	ita = 'melvorItA'
}

--- Formats a wikicode string to be bold and red
local function formatError(errorMessage)
	local eror = mw.html.create('span')
		:wikitext("'''")
		:css('color', 'red')
		:wikitext(errorMessage)
		:wikitext("'''")
		:done()
		
	return tostring(error)
end

--- Formats a given string to TitleCase.
-- @param name (string) String to format.
-- @return (string) Formatted string, or the input if it's not a string.
local function formatName(name)
	if type(name) == 'string' then
		return shared.titleCase(name)
	end
	
	return name
end

--- Parses the input and output items from the provided arguments.
-- @param args (table) Passed args table from the caller.
-- @param prefix (string) The prefix that determines input or output item parsing.
-- @return (table) A table containing parsed item information.
local function parseItemInOut(args, prefix)
	local items = {}
	for i = 1, MaxDynamicArgs do
		local numPrefix = prefix .. i

		-- Stop parsing. Could cause problems if user input skips indexes.
		if paramtest.is_empty(args[numPrefix]) then
			break
		end
			
		local pName = formatName(args[numPrefix])
		local pAmount = args[numPrefix .. AmountSuffix]
		local pValue = args[numPrefix .. ValueSuffix]

		-- Values *should* always exit this function with a non nil value.
		if paramtest.has_content(pAmount) then
			pAmount = tonumber(pAmount)
		end
		
		if not paramtest.has_content(pValue) or tonumber(pValue) == nil then
			pValue = itemdb.getItemValue(pName)
		else
			pValue = tonumber(pValue)
		end
		
		table.insert(items, {
			prmNumber = i,
			name = pName, 
			amount = pAmount, 
			value = pValue})
	end
	
	return items
end

--- Parses the skill experience from the provided arguments.
-- @param args (table) Passed args table from the caller.
-- @return (table) A table containing parsed skill experience information.
local function parseExp(args)
	local skills = {}
	for i = 1, MaxDynamicArgs do
		local skillPrefix = 'skillExp' .. i
		
		-- Stop parsing. Could cause problems if user input skips indexes.
		if paramtest.is_empty(args[skillPrefix]) then
			break
		end
			
		local pSkill = formatName(args[skillPrefix])
		local pExp = args[skillPrefix .. AmountSuffix]

		if paramtest.has_content(pExp) then 
			pExp = tonumber(pExp)
		end
		
		table.insert(skills, {
			prmNumber = i,
			name = pSkill, 
			exp = pExp})
	end
	
	return skills
end

--- Builds the section of the mmg table that shows the input and output items.
-- @param items (table) A table containing items
-- @return (string) The HTML representation of the item table section.
local function buildItemTable(items)
end

--- Builds the section of the mmg table that shows the skill experience gained.
-- @param items (table) A table containing skills and experience values.
-- @return (string) The HTML representation of the item table section.
local function buildExpTable(skills)
end

local function buildMMGTable(args)
	local pSkills = parseExp(args)
	local pInputs = parseItemInOut(args, 'input')
	local pOutputs = parseItemInOut(args, 'output')
	local dlcs = p.parseDLC(dlc)
	
	
	local html = mw.html.create()

	html:tag("table")
    :addClass("wikitable")
    :attr('style', 'width: 100%; text-align: center;')
    :tag("tr")
        :tag("td")
            :attr("colspan", 2)
            :wikitext('dlcIcon')
            :wikitext(args['guideName'] or '{{{guideName}}}')
    :tag("tr")
        :tag("th")
            :attr("colspan", 2)
            :wikitext("Requirements")
    :tag("tr")
        :tag("th")
            :wikitext("Skills")
        :tag("th")
            :wikitext("Recommended")
    :tag("tr")
        :tag("td")
            :wikitext("<SkillReqs>")
    :tag("td")
        :attr("rowspan", 3)
        :wikitext("<RecommendedReqs>")
    :tag("tr")
        :tag("th")
            :wikitext("Items")
    :tag("tr")
        :tag("td")
            :wikitext("<ItemReqs>")
    :tag("tr")
        :tag("th")
            :attr("colspan", 2)
            :wikitext("Results")
    :tag("tr")
        :tag("th")
            :wikitext("Profit")
        :tag("th")
            :wikitext("Experience gained")
    :tag("tr")
        :tag("td")
            :wikitext("<Total gp gained>")
        :done()
        :tag("td")
            :wikitext("<Exp values>")
    :tag("tr")
        :tag("th")
            :wikitext("Inputs")
        :done()
        :tag("th")
            :wikitext("Outputs")
    :tag("tr")
        :tag("td")
        :tag("td")

return tostring(html)
end

--- Returns the parsed result of the dlcParam.
-- @param dlcParam (string) A string separated by , listing the DLCs required for the MMG
-- @return (table) A table containing the items of provided DLCs
function p.getDLCIcons(dlcParam)
	if type(dlcParam) ~= 'string' then return {} end

	local dlcs = {}
	for _, arg in pairs(shared.splitString(dlcArgs, ',')) do
		for dlc, icon in pairs(DLCParams) do
			if shared.compareString(dlc, arg, true) then
				table.insert(dlcs, icon)
			end
		end
	end

	return dlcs
end

function p.main(frame)
	local args = frame:getParent().args
	return p._main(args)
end

function p._main(args)
	return buildMMGTable(args)
end

function p.test()
	local args = {
		guideName = "",
		interval = "",
		skills = "",
		items = "",
		other = "",
		skillExp1 = "Magic",
		skillExp1amount = "1000",
		skillExp2 = "Mining",
		skillExp2amount = "420",
		input1 = "nature rune",
		input1amount = "5",
		input1value = "69",
		input2 = "Fire Rune",
		input2amount = "20",
		output1 = "gp",
		output1amount = "1050",
		category = "",
		dlc = "",
		intensity = "",
		explanation = ""
	}
	
	local result = parseItemInOut(args, 'input')
	for k, v in pairs(result) do
		for a ,b in pairs(v) do
			mw.log(a .. '   =   '.. tostring(b))
		end
	end
	
end

return p