Module:ItemsByStat: Difference between revisions
Jump to navigation
Jump to search
SerpentofSet (talk | contribs) No edit summary |
SerpentofSet (talk | contribs) No edit summary |
||
Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
local AllItemData = mw.loadJsonData("Data:ItemData.json") | local AllItemData = mw.loadJsonData("Data:ItemData.json") | ||
local Lang = require("Module:Lang") | |||
-- I truly have no better idea of how to sort by cost within slot, so I'm gonna multiply the costs of slots I want lower in the table | -- I truly have no better idea of how to sort by cost within slot, so I'm gonna multiply the costs of slots I want lower in the table | ||
Line 7: | Line 8: | ||
multBySlot["Armor"] = 10000 | multBySlot["Armor"] = 10000 | ||
multBySlot["Tech"] = 100000000 | multBySlot["Tech"] = 100000000 | ||
-- For coloring the table by slot | |||
local colorBySlot = {} | |||
colorBySlot["Weapon"] = "#FCAC4D" | |||
colorBySlot["Armor"] = "#86C921" | |||
colorBySlot["Tech"] = "#DE9CFF" | |||
local selectByStat = function(stat) | local selectByStat = function(stat) | ||
Line 29: | Line 36: | ||
end | end | ||
--{{#invoke:ItemsByStat|tablefy|stat|statName|suffix}} | --{{#invoke:ItemsByStat|tablefy|stat|statName|suffix}} | ||
Line 45: | Line 48: | ||
outString = outString.. | outString = outString.. | ||
'|-style="background:'..colorBySlot[tableData[i][4]]..'"\n|'.. | '|-style="background:'..colorBySlot[tableData[i][4]]..'"\n|'.. | ||
frame:expandTemplate{title="Item", args={tableData[i][1]}}.."||".. | frame:expandTemplate{title="Item", args={tableData[i][1],Lang._search_string(tableData[i][1])}}.."||".. | ||
frame:expandTemplate{title="Souls", args={tableData[i][3]}}.."||".. | frame:expandTemplate{title="Souls", args={tableData[i][3]}}.."||".. | ||
'style="text-align:center;"|+'..tableData[i][5]..suffix.."\n" | 'style="text-align:center;"|+'..tableData[i][5]..suffix.."\n" |
Revision as of 22:16, 27 September 2024
Documentation for this module may be created at Module:ItemsByStat/doc
local p = {}
local AllItemData = mw.loadJsonData("Data:ItemData.json")
local Lang = require("Module:Lang")
-- I truly have no better idea of how to sort by cost within slot, so I'm gonna multiply the costs of slots I want lower in the table
local multBySlot = {}
multBySlot["Weapon"] = 1
multBySlot["Armor"] = 10000
multBySlot["Tech"] = 100000000
-- For coloring the table by slot
local colorBySlot = {}
colorBySlot["Weapon"] = "#FCAC4D"
colorBySlot["Armor"] = "#86C921"
colorBySlot["Tech"] = "#DE9CFF"
local selectByStat = function(stat)
-- List properties to grab and set up data structure to hold values
local inKeys = {"Name","Tier","Cost","Slot",stat,"Components"}
local outData = {}
local i = 1
for m,itemData in pairs(AllItemData) do
if itemData[stat] ~= nil and itemData[stat] ~= "0" then -- If Item has given stat in its keys,
outData[i] = {}
for x = 1,#inKeys do
outData[i][x] = itemData[inKeys[x]] -- grab stat and other values
end
i = i+1
end
end
-- Sort by cost within slot
table.sort(outData, function(a,b) return a[3]*multBySlot[a[4]]<b[3]*multBySlot[b[4]] end)
return outData
end
--{{#invoke:ItemsByStat|tablefy|stat|statName|suffix}}
p.tablefy = function(frame)
local stat = frame.args[1]
local statName = frame.args[2]
local suffix = frame.args[3]
local tableData = selectByStat(stat)
local outString = '{| class="wikitable sortable"\n|-\n!Item!!Cost!!'..statName..'\n'
for i=1,#tableData do
outString = outString..
'|-style="background:'..colorBySlot[tableData[i][4]]..'"\n|'..
frame:expandTemplate{title="Item", args={tableData[i][1],Lang._search_string(tableData[i][1])}}.."||"..
frame:expandTemplate{title="Souls", args={tableData[i][3]}}.."||"..
'style="text-align:center;"|+'..tableData[i][5]..suffix.."\n"
end
return outString.."|}"
end
return p