Module:ItemTables: Difference between revisions
Jump to navigation
Jump to search
add fire rate and stamina, include inclusions of different stat names, cleanup. WORKS NOW BUT ALSO BREAKS, invocations need to be reversed from internal to friendly, to friendly to internal |
add bullet shield |
||
Line 58: | Line 58: | ||
internal_to_friendly["ammo"] = { "BonusClipSizePercent", "BonusClipSize" } | internal_to_friendly["ammo"] = { "BonusClipSizePercent", "BonusClipSize" } | ||
internal_to_friendly["weapon damage"] = { "BaseAttackDamagePercent" } | internal_to_friendly["weapon damage"] = { "BaseAttackDamagePercent" } | ||
internal_to_friendly["bullet shield"] = { "BulletShieldMaxHealth", "BulletShieldOnCast" } | |||
internal_to_friendly["health"] = { "BonusHealth" } | internal_to_friendly["health"] = { "BonusHealth" } | ||
internal_to_friendly["health regen"] = { "BonusHealthRegen" } | internal_to_friendly["health regen"] = { "BonusHealthRegen" } |
Revision as of 23:34, 1 October 2024
Documentation for this module may be created at Module:ItemTables/doc
local p = {};
local data = mw.loadJsonData("Data:ItemData.json")
local get_cost = require("Module:ItemData")._get_cost
local get_type = require("Module:ItemData")._get_type
-- Adds commas delimiter to the thousands place
function Format(amount)
local formatted = amount
while true do
formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2')
if (k == 0) then
break
end
end
return formatted
end
--- Copies original table with its children as deep as possible. Does not handle metatables. (Copy is needed because Lua passes by reference, not value)
-- @function Deepcopy
-- @param {n-D table}
-- @return {n-D table}
function Deepcopy(orig)
local orig_type = type(orig)
local copy
if orig_type == 'table' then
copy = {}
for orig_key, orig_value in next, orig, nil do
copy[Deepcopy(orig_key)] = Deepcopy(orig_value)
end
else
copy = orig
end
return copy
end
-- local link_patterns = {}
-- link_patterns["BonusClipSizePercent"] = { "[Aa]mmo" }
-- link_patterns["CloseRangeBonusWeaponPower"] = { "[Cc]lose [Ww]eapon [Dd]amage" }
-- link_patterns["BaseAttackDamagePercent"] = { "[Ww]eapon [Dd]amage" }
-- link_patterns["BulletLifestealPercent"] = { "[Bb]ullet [Ll]ifesteal" }
-- link_patterns["BonusHealthRegen"] = { "[Hh]ealth [Rr]egen" }
-- link_patterns["BonusHealth"] = { "[Hh]ealth" }
-- link_patterns["BonusFireRate"] = { "[Ff]ire [Rr]ate" }
--
-- function FriendlyNames(desc)
-- for link, patterns in pairs(link_patterns) do
-- for i, v in ipairs(patterns) do
-- local a = string.find(desc, v)
-- if a then desc = link break
-- end
-- end
-- end
-- return desc
-- end
local internal_to_friendly = {}
internal_to_friendly["ammo"] = { "BonusClipSizePercent", "BonusClipSize" }
internal_to_friendly["weapon damage"] = { "BaseAttackDamagePercent" }
internal_to_friendly["bullet shield"] = { "BulletShieldMaxHealth", "BulletShieldOnCast" }
internal_to_friendly["health"] = { "BonusHealth" }
internal_to_friendly["health regen"] = { "BonusHealthRegen" }
internal_to_friendly["fire rate"] = { "BonusFireRate" }
internal_to_friendly["stamina"] = { "Stamina" }
function amicableNames(desc)
local keysTable = {}
desc = string.lower(desc or "")
for link, patterns in pairs(internal_to_friendly) do
if (desc == link) then keysTable = patterns end
end
return keysTable
end
p.itemPropTable = function(frame)
local TableValues = {}
local requirements = {}
local listofKeysTable = {}
local listofItems = ""
local property = frame.args[1] or mw.title.getCurrentTitle().text
local copyVar = property
listofKeysTable = amicableNames(property) -- need to switch this around from value to key, to key to values
local createTable = mw.html.create('table')
:addClass('wikitable sortable')
:tag('caption'):wikitext("List of Items"):done()
local createTableRow = mw.html.create('tr')
createTableRow
:tag('th'):wikitext('Name'):done()
:tag('th'):wikitext('Cost'):done()
:tag('th'):wikitext('Category'):done()
:tag('th'):wikitext('Stat change'):done()
createTable:node(createTableRow)
-- query all items
for internalName, itemName in pairs(data) do --itemName is the key. go through whole table. in this case itemName is the item table
local display = frame:expandTemplate{
title = 'ItemIcon',
args = {
itemName["Name"]
}
}
for _, t in pairs(listofKeysTable) do
-- filter out items that: don't have the property, don't have names (have 'null' names), and aren't disabled --//and itemName["Disabled"] == nil
if(itemName[t] ~= nil and itemName["Name"] ~= nil) then -- and itemName["Disabled"] == false --// the data field is not setup to filter this yet
listofItems = listofItems .. itemName["Name"] .. "<br/>"
local tableData = mw.html.create('tr')
tableData
:tag('td'):wikitext(display):done()
:tag('td'):wikitext(get_cost(itemName["Name"])):done()
:tag('td'):wikitext(get_type(itemName["Name"])):done()
:tag('td'):wikitext("+<b>" .. itemName[t].. "</b> " .. copyVar):done()
table.insert(requirements, tableData)
-- TableValues = table.insert(TableValues, itemName["Name"]) -- i may want to make a table first, so it includes weapon and cost to make it sortable.
end
end
end
for _, row in ipairs(requirements) do
createTableRow:node(row)
end
--createTable:node(createTableRow)
return tostring(createTable)
--return listofItems -- this is just a string list, same thing as createTable. delete this when line when finished
--return table.concat(TableValues, ", ")
end
return p