Module:Sandbox/Monster Domosed: Difference between revisionsGive feedback
Jump to navigation
Jump to search
test |
yea |
||
| (3 intermediate revisions by 2 users not shown) | |||
| Line 2: | Line 2: | ||
local data = mw.loadJsonData("Data:ItemData.json") | local data = mw.loadJsonData("Data:ItemData.json") | ||
local ability_data = mw.loadJsonData("Data:AbilityCards.json") | |||
-------------------------------------------------- | -------------------------------------------------- | ||
| Line 24: | Line 25: | ||
end | end | ||
-- Returns numeric cost or nil if invalid | |||
local function get_cost(item) | local function get_cost(item) | ||
local cost = tonumber(item["Cost"]) | |||
if cost == nil then | |||
return nil | |||
end | |||
return cost | |||
end | end | ||
| Line 36: | Line 42: | ||
-------------------------------------------------- | -------------------------------------------------- | ||
local function get_sorted_items() | local function get_sorted_items() | ||
local items = {} | local items = {} | ||
for _, item in pairs(data) do | for _, item in pairs(data) do | ||
if is_enabled(item) then | -- Exclude items with null / missing / non-numeric cost | ||
local cost = get_cost(item) | |||
if is_enabled(item) and cost ~= nil then | |||
table.insert(items, item) | table.insert(items, item) | ||
end | end | ||
| Line 47: | Line 55: | ||
table.sort(items, function(a, b) | table.sort(items, function(a, b) | ||
-- 1. Sort by type | |||
local type_a = get_type_rank(a) | local type_a = get_type_rank(a) | ||
local type_b = get_type_rank(b) | local type_b = get_type_rank(b) | ||
if type_a ~= type_b then | if type_a ~= type_b then | ||
return type_a < type_b | return type_a < type_b | ||
| Line 58: | Line 65: | ||
local cost_a = get_cost(a) | local cost_a = get_cost(a) | ||
local cost_b = get_cost(b) | local cost_b = get_cost(b) | ||
if cost_a ~= cost_b then | if cost_a ~= cost_b then | ||
return cost_a < cost_b | return cost_a < cost_b | ||
| Line 74: | Line 80: | ||
-------------------------------------------------- | -------------------------------------------------- | ||
function p._get_enabled_items_sorted() | function p._get_enabled_items_sorted() | ||
return get_sorted_items() | return get_sorted_items() | ||
| Line 88: | Line 93: | ||
return names | return names | ||
end | |||
-------------------------------------------------- | |||
-- Abilities | |||
-------------------------------------------------- | |||
local function get_all_abilities() | |||
local abilities = {} | |||
for _, hero in pairs(ability_data) do | |||
if type(hero) == "table" then | |||
for key, ability in pairs(hero) do | |||
if tonumber(key) ~= nil | |||
and type(ability) == "table" | |||
and ability["Name"] ~= nil | |||
then | |||
table.insert(abilities, { | |||
Index = tonumber(key), | |||
Name = ability["Name"] | |||
}) | |||
end | |||
end | |||
end | |||
end | |||
return abilities | |||
end | |||
local function get_formatted_abilities(frame) | |||
local abilities = get_all_abilities() | |||
local output = {} | |||
for _, ability in ipairs(abilities) do | |||
table.insert(output, frame:expandTemplate{ | |||
title = "AbilityIcon", | |||
args = { | |||
ability["Name"] | |||
} | |||
}) | |||
end | |||
return output | |||
end | end | ||
| Line 94: | Line 141: | ||
-------------------------------------------------- | -------------------------------------------------- | ||
-- {{#invoke:Monster Domosed|get_list}} | -- {{#invoke:Sandbox/Monster Domosed|get_list}} | ||
function p.get_list(frame) | function p.get_list(frame) | ||
return table.concat(p._get_enabled_item_names_sorted(), "\n") | |||
end | end | ||
-- {{#invoke:Monster Domosed|get_csv}} | -- {{#invoke:Sandbox/Monster Domosed|get_csv}} | ||
function p.get_csv(frame) | function p.get_csv(frame) | ||
return table.concat(p._get_enabled_item_names_sorted(), ",") | |||
end | end | ||
-- {{#invoke:Monster Domosed|get_count}} | -- {{#invoke:Sandbox/Monster Domosed|get_count}} | ||
function p.get_count(frame) | function p.get_count(frame) | ||
return tostring(#p._get_enabled_item_names_sorted()) | return tostring(#p._get_enabled_item_names_sorted()) | ||
end | |||
-- {{#invoke:Sandbox/Monster Domosed|get_abilities}} | |||
function p.get_abilities(frame) | |||
return table.concat(get_formatted_abilities(frame), "\n") | |||
end | |||
-- {{#invoke:Sandbox/Monster Domosed|get_abilities_csv}} | |||
function p.get_abilities_csv(frame) | |||
return table.concat(get_formatted_abilities(frame), ",") | |||
end | |||
-- {{#invoke:Sandbox/Monster Domosed|get_ability_count}} | |||
function p.get_ability_count(frame) | |||
return tostring(#get_all_abilities()) | |||
end | end | ||
return p | return p | ||
Latest revision as of 22:32, 10 September 2026
Documentation for this module may be created at Module:Sandbox/Monster Domosed/doc
local p = {}
local data = mw.loadJsonData("Data:ItemData.json")
local ability_data = mw.loadJsonData("Data:AbilityCards.json")
--------------------------------------------------
-- Constants
--------------------------------------------------
-- Desired type order
local TYPE_ORDER = {
Weapon = 1,
Armor = 2, -- Vitality
Tech = 3 -- Spirit
}
--------------------------------------------------
-- Helpers
--------------------------------------------------
local function is_enabled(item)
return item
and item["Name"] ~= nil
and (item["IsDisabled"] == false or item["IsDisabled"] == nil)
end
-- Returns numeric cost or nil if invalid
local function get_cost(item)
local cost = tonumber(item["Cost"])
if cost == nil then
return nil
end
return cost
end
local function get_type_rank(item)
return TYPE_ORDER[item["Slot"]] or math.huge
end
--------------------------------------------------
-- Core logic
--------------------------------------------------
local function get_sorted_items()
local items = {}
for _, item in pairs(data) do
-- Exclude items with null / missing / non-numeric cost
local cost = get_cost(item)
if is_enabled(item) and cost ~= nil then
table.insert(items, item)
end
end
table.sort(items, function(a, b)
-- 1. Sort by type
local type_a = get_type_rank(a)
local type_b = get_type_rank(b)
if type_a ~= type_b then
return type_a < type_b
end
-- 2. Sort by cost (low → high)
local cost_a = get_cost(a)
local cost_b = get_cost(b)
if cost_a ~= cost_b then
return cost_a < cost_b
end
-- 3. Stable fallback: name
return a["Name"] < b["Name"]
end)
return items
end
--------------------------------------------------
-- Public (module-level) access
--------------------------------------------------
function p._get_enabled_items_sorted()
return get_sorted_items()
end
function p._get_enabled_item_names_sorted()
local items = get_sorted_items()
local names = {}
for _, item in ipairs(items) do
table.insert(names, item["Name"])
end
return names
end
--------------------------------------------------
-- Abilities
--------------------------------------------------
local function get_all_abilities()
local abilities = {}
for _, hero in pairs(ability_data) do
if type(hero) == "table" then
for key, ability in pairs(hero) do
if tonumber(key) ~= nil
and type(ability) == "table"
and ability["Name"] ~= nil
then
table.insert(abilities, {
Index = tonumber(key),
Name = ability["Name"]
})
end
end
end
end
return abilities
end
local function get_formatted_abilities(frame)
local abilities = get_all_abilities()
local output = {}
for _, ability in ipairs(abilities) do
table.insert(output, frame:expandTemplate{
title = "AbilityIcon",
args = {
ability["Name"]
}
})
end
return output
end
--------------------------------------------------
-- Invoke access points
--------------------------------------------------
-- {{#invoke:Sandbox/Monster Domosed|get_list}}
function p.get_list(frame)
return table.concat(p._get_enabled_item_names_sorted(), "\n")
end
-- {{#invoke:Sandbox/Monster Domosed|get_csv}}
function p.get_csv(frame)
return table.concat(p._get_enabled_item_names_sorted(), ",")
end
-- {{#invoke:Sandbox/Monster Domosed|get_count}}
function p.get_count(frame)
return tostring(#p._get_enabled_item_names_sorted())
end
-- {{#invoke:Sandbox/Monster Domosed|get_abilities}}
function p.get_abilities(frame)
return table.concat(get_formatted_abilities(frame), "\n")
end
-- {{#invoke:Sandbox/Monster Domosed|get_abilities_csv}}
function p.get_abilities_csv(frame)
return table.concat(get_formatted_abilities(frame), ",")
end
-- {{#invoke:Sandbox/Monster Domosed|get_ability_count}}
function p.get_ability_count(frame)
return tostring(#get_all_abilities())
end
return p