| Latest revision |
Your text |
| 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")
| |
|
| |
| -- Grab items from item data (has "upgrade" in item key and is not marked as disabled)
| |
| InGameItemData = {}
| |
|
| |
| for ItemKey, ItemData in pairs(AllItemData) do
| |
| if string.find(ItemKey, "upgrade") ~= nil and ItemData["Disabled"] == false then
| |
| table.insert(InGameItemData, ItemData)
| |
| end
| |
| end
| |
|
| |
| -- 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) | | local selectByStat = function(stat) |
| -- List properties to grab, extend as necessary | | -- List properties to grab and set up data structure to hold values |
| -- Probably not wise to move or remove elements because there's some hard-coded indexing later
| |
| local inKeys = {"Name","Tier","Cost","Slot",stat,"Components"} | | local inKeys = {"Name","Tier","Cost","Slot",stat,"Components"} |
| | local outData = {} |
| | for x=1,#inKeys do |
| | outData[x] = {} |
| | end |
| | | |
| local outData = {}
| |
| local i = 1 | | local i = 1 |
| for itemKey,itemData in pairs(InGameItemData) do | | for m,itemData in pairs(AllItemData) do |
| if itemData[stat] ~= nil and itemData[stat] ~= "0" then -- If Item has non-zero stat in its keys, | | if itemData[stat] ~= nil and itemData[stat] ~= "0" then -- If Item has given stat in its keys, |
| outData[i] = {} -- start a new record of data and
| |
| for x = 1,#inKeys do | | for x = 1,#inKeys do |
| outData[i][x] = itemData[inKeys[x]] -- grab stat and other values | | outData[x][i] = itemData[inKeys[x]] -- grab stat and other values |
| end | | end |
| outData[i]['itemKey'] = itemKey -- Throw item key in there for good measure
| |
| outData[i]['multCost'] = itemData['Cost'] * multBySlot[itemData['Slot']]
| |
| i = i+1 | | i = i+1 |
| end | | end |
| end | | end |
| | | return outData |
| -- Sort by cost within slot
| |
| table.sort(outData, function(a,b) return a['multCost']<b['multCost'] end)
| |
| return outData -- outData is a table of tables, one for each Item that has the specified stat, where each inner table has the data specified with inKeys, in order
| |
| end | | end |
|
| |
|
| --{{#invoke:ItemsByStat|tablefy|stat|statName|suffix}}
| | local colorBySlot = {} |
| --stat: Name of statistic to look for in ItemData.json. Must match the actual key, e.g. TechPower for Spirit Power
| | colorBySlot["Weapon"] = "#FCAC4D" |
| --statName: Column header in final table. TechPower isn't the name for the stat in-game, so change it here
| | colorBySlot["Armor"] = "#86C921" |
| --suffix: String to append to numeric value to indicate units. As of now only % and m/s are used in-game and in fact this is left blank for most stats
| | colorBySlot["Tech"] = "#DE9CFF" |
| | |
| p.tablefy = function(frame) | | p.tablefy = function(frame) |
| local stat = frame.args[1] | | local stat = frame.args[1] |
| local statName = frame.args[2]
| |
| local suffix = frame.args[3]
| |
|
| |
| local tableData = selectByStat(stat) | | local tableData = selectByStat(stat) |
| local outString = '{| class="wikitable sortable"\n|-\n!Item!!Cost!!'..statName..'\n' | | local outString = '{| class="wikitable sortable"\n|-\n!Item!!Tier!!Cost!!Value\n' |
| for i=1,#tableData do -- Very ugly wikitable code | | for i=1,#tableData[1] do |
| outString = outString.. | | outString = outString..'|-style="background: '..colorBySlot[tableData[4][i]]..'"\n|{{ItemIcon{{{!}}'..tableData[1][i].."}}||"..tableData[2][i].."||"..tableData[3][i].."||"..tableData[5][i].."\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.get_string(tableData[i]['itemKey'])}}.."||"..
| |
| frame:expandTemplate{title="Souls", args={tableData[i][3]}}.."||"..
| |
| 'style="text-align:center;"|+'..tableData[i][5]..suffix.."\n"
| |
| end | | end |
| return outString.."|}" | | return outString.."|}" |