Module:ItemData: Difference between revisionsGive feedback
Add get_builds_into functions to lookup which items use the current item as a component (reverses the Components array). |
Added bonusbasehealth for colossus |
||
| (9 intermediate revisions by 4 users not shown) | |||
| Line 25: | Line 25: | ||
BonusAbilityDurationPercent = true, | BonusAbilityDurationPercent = true, | ||
BonusAttackRangePercent = true, | BonusAttackRangePercent = true, | ||
BonusBaseHealth = true, | |||
BonusBulletSpeedPercent = true, | BonusBulletSpeedPercent = true, | ||
BonusClipSizePercent = true, | BonusClipSizePercent = true, | ||
| Line 129: | Line 130: | ||
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 276: | Line 284: | ||
--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 property = frame.args[2] | |||
local raw = frame.args.raw == 'true' | |||
local item = get_json_item(item_name) | |||
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] | |||
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 339: | Line 351: | ||
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 346: | Line 360: | ||
if(components == nil) then return nil end | if(components == nil) then return nil end | ||
local component_key = components[ | local slot = tonumber(slot_arg) or 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) then return nil end | if (component == nil or component["IsDisabled"] == true) then return nil end | ||
return component['Name'] | return component['Name'] | ||
| Line 354: | Line 372: | ||
-- {{Items count}} access point | -- {{Items count}} access point | ||
function p.get_headcount() | function p.get_headcount(frame) | ||
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 (v["IsDisabled"] == false and v["Name"] ~= nil) then | if item_type == "Standard" 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 477: | Line 505: | ||
local parents = {} | local parents = {} | ||
for key, item in pairs(data) do | for key, item in pairs(data) do | ||
if item.Components and type(item.Components) == "table" then | if item.IsDisabled ~= true and item.Components and type(item.Components) == "table" then | ||
for _, comp in ipairs(item.Components) do | for _, comp in ipairs(item.Components) do | ||
if comp == target_key then | if comp == target_key then | ||
| Line 506: | Line 534: | ||
-- Template: {{#invoke:ItemData|get_builds_into|ITEM_NAME}} | -- Template: {{#invoke:ItemData|get_builds_into|ITEM_NAME}} | ||
-- Returns | -- Returns fully rendered ItemIcon templates | ||
p.get_builds_into = function(frame) | p.get_builds_into = function(frame) | ||
local item = frame.args[1] | local item = frame.args[1] | ||
local parents = get_component_of(item) | local parents = get_component_of(item) | ||
if #parents == 0 then return "" end | if #parents == 0 then return "" end | ||
local and_word = frame:preprocess("{{#invoke:Dictionary|translate|And}}") | |||
and_word = mw.ustring.lower(and_word) | |||
local parts = {} | local parts = {} | ||
for _, key in ipairs(parents) do | for _, key in ipairs(parents) do | ||
local name = data[key] and data[key]["Name"] or key | local name = data[key] and data[key]["Name"] or key | ||
local icon = mw.getCurrentFrame():expandTemplate{ title = "ItemIcon", args = { name } } | |||
table.insert(parts, icon) | |||
end | end | ||
if #parts == 1 then return parts[1] end | if #parts == 1 then return parts[1] end | ||
if #parts == 2 then return parts[1] .. " | if #parts == 2 then | ||
return parts[1] .. " " .. and_word .. " " .. parts[2] | |||
end | |||
local last = table.remove(parts) | local last = table.remove(parts) | ||
return table.concat(parts, ", ") .. ", | return table.concat(parts, ", ") .. ", " .. and_word .. " " .. last | ||
end | end | ||
return p | return p | ||