Editing Module:ItemData

Warning: You are not logged in. Once you make an edit, a temporary account will be created for you. Learn more. Log in or create an account to continue receiving notifications after this account expires, and to access other features.
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision Your text
Line 25: Line 25:
BonusAbilityDurationPercent = true,
BonusAbilityDurationPercent = true,
BonusAttackRangePercent = true,
BonusAttackRangePercent = true,
BonusBaseHealth = true,
BonusBulletSpeedPercent = true,
BonusBulletSpeedPercent = true,
BonusClipSizePercent = true,
BonusClipSizePercent = true,
Line 34: Line 33:
BonusSoulsPct = true,
BonusSoulsPct = true,
BonusZoomPercent = true,
BonusZoomPercent = true,
BuffBulletResist = true,
BuffMeleeDamageBoost = true,
BuffMeleeDamageBoost = true,
BuffTechResist = true,
BulletArmorReduction = true,
BulletArmorReduction = true,
BulletDamageReflectedPct = true,
BulletDamageReflectedPct = true,
Line 130: Line 127:
WeaponDamagePerStack = true,
WeaponDamagePerStack = true,
WeaponPowerPerStack = true,
WeaponPowerPerStack = true,
}
-- Mappings from placeholder tokens (used in descriptions) to the actual
-- flat property keys in Data:ItemData.json
local PROPERTY_KEY_OVERRIDES = {
    ["ArcaneSurgeWindow"] = "AbilityDuration",
    -- Add any other mismatches here as they appear
}
}


Line 284: Line 274:
--check Data:ItemData.json for properties
--check Data:ItemData.json for properties
p.get_prop = function(frame)
p.get_prop = function(frame)
    local item_name = frame.args[1]
local item_name = frame.args[1]
    local property = frame.args[2]
local property = frame.args[2]
    local raw = frame.args.raw == 'true'
local raw = frame.args.raw == 'true'
    local item = get_json_item(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 == nil) then return "<span style=\"color:red;\">Item Not Found.</span>" end


    -- Look up property directly; if missing, try the override table
local prop_value = item[property]
    local prop_value = item[property]
if (prop_value == nil) then return nil end
    if prop_value == nil and PROPERTY_KEY_OVERRIDES[property] then
        prop_value = item[ PROPERTY_KEY_OVERRIDES[property] ]
    end
    if (prop_value == nil) then return nil end


local display_value
local display_value
Line 351: Line 337:
p.get_component_name = function(frame)
p.get_component_name = function(frame)
local item_name = frame.args[1]
local item_name = frame.args[1]
local slot_arg = frame.args[2]
local item = get_json_item(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 == nil) then return "<span style=\"color:red;\">Item Not Found.</span>" end
Line 360: Line 344:
if(components == nil) then return nil end
if(components == nil) then return nil end
local slot = tonumber(slot_arg) or 1
local component_key = components[1]
local component_key = components[slot]
if (component_key == nil) then return nil end
local component = data[component_key]
local component = data[component_key]
local component = data[component_key]
if (component == nil or component["IsDisabled"] == true) then return nil end
if (component == nil) then return nil end
return component['Name']
return component['Name']
Line 372: Line 352:


-- {{Items count}} access point
-- {{Items count}} access point
function p.get_headcount(frame)
function p.get_headcount()
local item_type = frame.args[1]
local iter = 0
local iter = 0
local tbl = get_similar_items("IsDisabled")
local tbl = get_similar_items("IsDisabled")
for _, v in ipairs(tbl) do
for _, v in ipairs(tbl) do
if item_type == "Standard" then
if (v["IsDisabled"] == false and v["Name"] ~= nil) then
-- return only regular items
    if (v["IsDisabled"] == false and v["Slot"] ~= nil and v["StreetBrawl"] == false and v["Name"] ~= nil) then
iter = iter + 1
iter = iter + 1
  end
end
elseif item_type == "Street Brawl" then
-- return only street brawl items
        if (v["IsDisabled"] == false and v["Slot"] ~= nil and v["StreetBrawl"] == true and v["Name"] ~= nil) then
iter = iter + 1
  end
  end
end
end
return iter
return iter
Line 445: Line 415:
return result
return result
end
end
end
-- Helping function for [[Module:Enhanced]]
function p.get_prop_meta(item_name, property)
local item = get_json_item(item_name)
if not item then return nil end
local raw = item[property]
if raw == nil then return nil end
local meta = {
unit = nil,    -- "%", "m", "s" or nil
scale = nil    -- { type = "Ss"/"Boon", value = number } or nil
}
if percentage_properties[property] then
meta.unit = "%"
end
if type(raw) == "table"
and raw.Scale
and raw.Scale.Value
and raw.Scale.Type
then
local scale_val = tonumber(raw.Scale.Value)
if scale_val and scale_val ~= 0 then
meta.scale = {
type = raw.Scale.Type == "power_increase" and "Boon" or "Ss",
value = util_module.round_to_sig_fig(scale_val, 2)
}
end
end
return meta
end
-- Builds Into functions
-- Helper: accepts item key or display name, returns the key used in data table
local function get_codename_from_input(input)
if data[input] then return input end
for k, v in pairs(data) do
if v["Name"] == input and (v["IsDisabled"] == false or v["IsDisabled"] == nil) then
return k
end
end
for k, v in pairs(data) do
if v["Name"] == input then return k end
end
return nil
end
-- Core logic: returns table of keys that have this item in their Components
local function get_component_of(item_input)
local target_key = get_codename_from_input(item_input)
if not target_key then return {} end
local parents = {}
for key, item in pairs(data) do
if item.IsDisabled ~= true and item.Components and type(item.Components) == "table" then
for _, comp in ipairs(item.Components) do
if comp == target_key then
table.insert(parents, key)
break
end
end
end
end
table.sort(parents)
return parents
end
-- Template: {{#invoke:ItemData|get_builds_into_count|ITEM_NAME}}
p.get_builds_into_count = function(frame)
local item = frame.args[1]
return #get_component_of(item)
end
-- Template: {{#invoke:ItemData|get_builds_into_name|ITEM_NAME|INDEX}}
p.get_builds_into_name = function(frame)
local item = frame.args[1]
local idx = tonumber(frame.args[2]) or 1
local parents = get_component_of(item)
local key = parents[idx]
return key and data[key] and data[key]["Name"] or ""
end
-- Template: {{#invoke:ItemData|get_builds_into|ITEM_NAME}}
-- Returns fully rendered ItemIcon templates
p.get_builds_into = function(frame)
local item = frame.args[1]
local parents = get_component_of(item)
if #parents == 0 then return "" end
local and_word = frame:preprocess("{{#invoke:Dictionary|translate|And}}")
and_word = mw.ustring.lower(and_word)
local parts = {}
for _, key in ipairs(parents) do
local name = data[key] and data[key]["Name"] or key
local icon = mw.getCurrentFrame():expandTemplate{ title = "ItemIcon", args = { name } }
table.insert(parts, icon)
end
if #parts == 1 then return parts[1] end
if #parts == 2 then
return parts[1] .. " " .. and_word .. " " .. parts[2]
end
local last = table.remove(parts)
return table.concat(parts, ", ") .. ", " .. and_word .. " " .. last
end
end


return p
return p
Please note that all contributions to The Deadlock Wiki are considered to be released under the Creative Commons Attribution-NonCommercial-ShareAlike (see Deadlock:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!
Cancel Editing help (opens in new window)
Preview page with this template