Module:MoneyMakingGuide: Difference between revisions

From Melvor Idle
(Add formatting of user input)
(Add table creation (still empty))
Line 5: Line 5:
local paramtest = require('Module:Shared/Paramtest')
local paramtest = require('Module:Shared/Paramtest')
local itemdb = require('Module:Items')
local itemdb = require('Module:Items')
local icons = require('Module:Icons')


-- Constants
local MaxDynamicArgs = 20
local MaxDynamicArgs = 20
local AmountSuffix = 'amount'
local AmountSuffix = 'amount'
local ValueSuffix = 'value'
local ValueSuffix = 'value'
local SkillPrefix = 'skillExp'
local SkillPrefix = 'skillExp'
local DLCParams = {
aod = 'melvorAoD',
toth  = 'melvorTotH',
ita = 'melvorItA'
}


function p.main(frame)
--- Formats a wikicode string to be bold and red
local args = frame:getParent().args
local function formatError(errorMessage)
return p._main(args)
local eror = mw.html.create('span')
end
:wikitext("'''")
 
:css('color', 'red')
function p._main(args)
:wikitext(errorMessage)
return formatError("Module:MoneyMakingGuide is not yet implemented. Do not use.")
:wikitext("'''")
end
:done()
 
--- Builds the section of the mmg table that shows the input and output items.
return tostring(error)
-- @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
end


Line 111: Line 109:
end
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("<ActivityName>")
    :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")


--- Formats a wikicode string to be bold and red
return tostring(html)
local function formatError(errorMessage)
end
local eror = mw.html.create('span')
 
:wikitext("'''")
--- Returns the parsed result of the dlcArgs.
:css('color', 'red')
-- @param dlcArgs (string) A string separated by , listing the DLCs required for the MMG
:wikitext(errorMessage)
-- @return (table) A table listing which DLCs are required.
:wikitext("'''")
function p.parseDLC(dlcArgs)
:done()
if type(dlcArgs) ~= 'string' then return {} end
 
return tostring(error)
local dlcs = {}
for _, arg in pairs(shared.splitString(dlcArgs, ',')) do
for dlc, ns in pairs(DLCParams) do
if shared.compareString(dlc, arg, true) then
table.insert(dlcs, ns)
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
end



Revision as of 17:23, 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'
local DLCParams = { 
	aod = 'melvorAoD', 
	toth  = 'melvorTotH', 
	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("<ActivityName>")
    :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 dlcArgs.
-- @param dlcArgs (string) A string separated by , listing the DLCs required for the MMG
-- @return (table) A table listing which DLCs are required.
function p.parseDLC(dlcArgs)
	if type(dlcArgs) ~= 'string' then return {}	end

	local dlcs = {}
	for _, arg in pairs(shared.splitString(dlcArgs, ',')) do
		for dlc, ns in pairs(DLCParams) do
			if shared.compareString(dlc, arg, true) then
				table.insert(dlcs, ns)
			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