Module:GameData: Difference between revisionsGive feedback
Jump to navigation
Jump to search
Remove Upgrades skip in find_value so abilities gaining charges via upgrades are included (with help from vergir-bot LLM) |
get_entities now matches props as values too, enabling Scale.Type-based filtering (with help from vergir-bot LLM) |
||
| Line 25: | Line 25: | ||
end | end | ||
-- Recursively searches a record for a | -- Recursively searches a record for a match against prop, which may be: | ||
-- | -- - a key name: matches if the key exists with a non-zero/non-empty value | ||
-- | -- - a plain value: matches if the string appears as a value anywhere in the record | ||
-- | -- Returns true if a match is found, false otherwise. | ||
local function record_matches_prop(record, prop) | |||
-- | |||
local function | |||
for k, v in pairs(record) do | for k, v in pairs(record) do | ||
if k == | -- Key match: property name exists with a meaningful value | ||
return | if k == prop then | ||
if v ~= nil and v ~= 0 and v ~= "" and v ~= "0" and v ~= "0m" then | |||
return true | |||
if | end | ||
end | |||
if type(v) == "table" then | |||
if record_matches_prop(v, prop) then return true end | |||
elseif type(v) == "string" then | |||
-- Value match: prop string appears as a value (e.g. Scale.Type = "melee") | |||
if v == prop then return true end | |||
end | end | ||
end | end | ||
return | return false | ||
end | end | ||
-- Returns all active entities from a dataset that | -- Returns all active entities from a dataset that match at least one of the | ||
-- | -- given properties. A property may be matched either as a key name (the | ||
-- property exists with a non-zero value) or as a plain string value anywhere | |||
-- in the record (e.g. "melee" matching Scale.Type = "melee"). | |||
-- @param dataset string one of the GameData.Dataset constants | -- @param dataset string one of the GameData.Dataset constants | ||
-- @param properties table array of | -- @param properties table array of property strings | ||
-- @return table array of matching entity records | -- @return table array of matching entity records | ||
function p.get_entities(dataset, properties) | function p.get_entities(dataset, properties) | ||
| Line 55: | Line 61: | ||
if is_active(record) then | if is_active(record) then | ||
for _, prop in ipairs(properties) do | for _, prop in ipairs(properties) do | ||
if record_matches_prop(record, prop) then | |||
table.insert(results, record) | table.insert(results, record) | ||
break | break | ||