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