|
|
| (42 intermediate revisions by 4 users not shown) |
| Line 1: |
Line 1: |
| local p = {};
| | This page is protected from editing. Please see [[Deadlock:User pages]]. |
| local data = mw.loadJsonData("Data:ItemData.json")
| |
| | |
| ---------------------------------------- Utility functions
| |
| | |
| -- Returns the table of a specific item
| |
| -- @function get_json_item
| |
| -- @param {string}
| |
| -- @return {table}
| |
| local function get_json_item(name)
| |
| for _, v in pairs(data) do
| |
| if (v["Name"] == name and not v["IsDisabled"]) then
| |
| return v
| |
| end
| |
| end
| |
| return nil
| |
| end
| |
| | |
| -- Returns an array of item tables that have the same properties
| |
| -- @function get_similar_items
| |
| -- @param {string}
| |
| -- @return {array of tables}
| |
| local function get_similar_items(property)
| |
| local similarItems = {}
| |
| for _, v in pairs(data) do
| |
| if (v[property] ~= nil) then
| |
| table.insert(similarItems, v)
| |
| end
| |
| end
| |
| return similarItems
| |
| end
| |
| | |
| -- Adds commas delimiter to the thousands place
| |
| local lang = mw.language.getContentLanguage()
| |
| local function Format(amount)
| |
| local formatted = amount
| |
| if(type(formatted) ~= "number") then return "<span style=\"color:red;\">Cannot format non-number value.</span>" end
| |
| return lang:formatNum(tonumber(formatted))
| |
| end
| |
| | |
| --- Get cost of an item
| |
| -- @function get_cost
| |
| -- @param {string}
| |
| -- @return {number}
| |
| local function get_cost(item_name)
| |
| local item = get_json_item(item_name)
| |
| if(item == nil) then return "<span style=\"color:red;\">Item Not Found.</span>" end
| |
|
| |
| local cost = 0
| |
| local cur_item = item
| |
| repeat
| |
| cost = cost + cur_item["Cost"]
| |
| if(cur_item["Components"] == nil) then
| |
| break
| |
| end
| |
| cur_item = data[cur_item["Components"][1]]
| |
| until cur_item == nil
| |
| | |
| return cost
| |
| end
| |
| | |
| --- Get type/slot/category of an item
| |
| -- @function get_type
| |
| -- @param {string}
| |
| -- @return {string}
| |
| local function get_type(item_name)
| |
| local item = get_json_item(item_name)
| |
| if(item == nil) then return "<span style=\"color:red;\">Item Not Found.</span>" end
| |
|
| |
| if (item["Slot"] == "Weapon") then
| |
| return "Weapon"
| |
| elseif (item["Slot"] == "Armor") then
| |
| return "Vitality"
| |
| elseif (item["Slot"] == "Tech") then
| |
| return "Spirit"
| |
| else
| |
| return nil
| |
| end
| |
| | |
| end
| |
| | |
| ---------------------------------------- Invocable functions
| |
| | |
| --- {{#invoke:ItemData|get_cost|ITEM_NAME}} access point
| |
| p.get_cost = function(frame)
| |
| local item_name = frame.args[1]
| |
| return Format(get_cost(item_name))
| |
| end
| |
| | |
| -- Module access point
| |
| function p._get_cost(a)
| |
| a = tostring(a) or '0'
| |
| return get_cost(a)
| |
| end
| |
| | |
| -- {{#invoke:ItemData|get_type|ITEM_NAME}} access point
| |
| p.get_type = function(frame)
| |
| local item_name = frame.args[1]
| |
| return get_type(item_name)
| |
| end
| |
| | |
| -- Module access point
| |
| function p._get_type(a)
| |
| a = tostring(a) or ""
| |
| return get_type(a)
| |
| end
| |
| | |
| --{{#invoke:ItemData|is_active|ITEM_NAME}}--
| |
| p.is_active = function(frame)
| |
| local item_name = frame.args[1]
| |
| local item = get_json_item(item_name)
| |
| if(item == nil) then return "<span style=\"color:red;\">Item Not Found.</span>" end
| |
|
| |
| if (item["Activation"] == "Passive") then
| |
| return false
| |
| else
| |
| return true
| |
| end
| |
| end
| |
| | |
| --{{#invoke:ItemData|get_prop|ITEM_NAME|PROPERTY}}--
| |
| --check Data:ItemData.json for properties
| |
| p.get_prop = function(frame)
| |
| local tableValues = {}
| |
| local item_name = frame.args[1]
| |
| local property = frame.args[2]
| |
| local item = get_json_item(item_name)
| |
| if(item == nil) then return "<span style=\"color:red;\">Item Not Found.</span>" end
| |
| if(type(item[property]) == "table") then
| |
| for i,v in pairs(item[property]) do
| |
| local tableValues = table.insert(tableValues, v)
| |
| end
| |
| return table.concat(tableValues, ", ")
| |
| end
| |
| return item[property]
| |
| end
| |
| | |
| | |
| p.get_component_name = function(frame)
| |
| local item_name = frame.args[1]
| |
| local item = get_json_item(item_name)
| |
| if(item == nil) then return "<span style=\"color:red;\">Item Not Found.</span>" end
| |
|
| |
| local components = item['Components']
| |
| --return empty string if no component found
| |
| if(components == nil) then return nil end
| |
|
| |
| local component_key = components[1]
| |
| local component = data[component_key]
| |
| if (component == nil) then return nil end
| |
|
| |
| return component['Name']
| |
| end
| |
| | |
| -- {{Items count}} access point
| |
| function p.get_headcount()
| |
| local iter = 0
| |
| local tbl = get_similar_items("IsDisabled")
| |
| for _, v in ipairs(tbl) do
| |
| if (v["IsDisabled"] == false and v["Name"] ~= nil) then
| |
| iter = iter + 1
| |
| end
| |
| end
| |
| return iter
| |
| end
| |
| | |
| -- New function to get all item data as a table
| |
| p.get_item_data = function(frame)
| |
| local item_name = frame.args[1]
| |
| local item = get_json_item(item_name)
| |
| if not item then return "<span style=\"color:red;\">Item Not Found.</span>" end
| |
| return item
| |
| end
| |
| | |
| -- Function to get formatted stats for the infobox
| |
| p.get_formatted_stats = function(frame)
| |
| local item_name = frame.args[1]
| |
| local item = get_json_item(item_name)
| |
| if not item then return "" end
| |
|
| |
| local stats = {}
| |
|
| |
| -- Add basic stats
| |
| if item.TechPower and item.TechPower ~= "0" then
| |
| table.insert(stats, "• "..item.TechPower.." [[File:Spirit icon.png|20px]] Spirit Power")
| |
| end
| |
| if item.WeaponPower and item.WeaponPower ~= "0" then
| |
| table.insert(stats, "• "..item.WeaponPower.." [[File:Weapon Icon.png|20px]] Weapon Damage")
| |
| end
| |
| if item.TechResist and item.TechResist ~= "0" then
| |
| table.insert(stats, "• "..item.TechResist.." [[File:Spirit Resist Icon.png|20px]] Tech Resist")
| |
| end
| |
| if item.BulletResist and item.BulletResist ~= "0" then
| |
| table.insert(stats, "• "..item.BulletResist.." [[File:Bullet Resist Icon.png|20px]] Bullet Resist")
| |
| end
| |
|
| |
| -- Add ability stats if active item
| |
| if item.Activation ~= "Passive" then
| |
| if item.AbilityCooldown then
| |
| table.insert(stats, "• [[File:Cooldown Icon.png|20px]] "..item.AbilityCooldown.."s Cooldown")
| |
| end
| |
| if item.AbilityCastRange and item.AbilityCastRange ~= "0" then
| |
| table.insert(stats, "• "..item.AbilityCastRange.."m Cast Range")
| |
| end
| |
| end
| |
|
| |
| return table.concat(stats, "\n|-\n| ")
| |
| end
| |
| | |
| | |
| return p
| |