Module:Sandbox/Monster Domosed: Difference between revisions

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)
return tonumber(item["Cost"]) or math.huge
local cost = tonumber(item["Cost"])
if cost == nil then
return nil
end
return cost
end
end


Line 36: Line 42:
--------------------------------------------------
--------------------------------------------------


-- Returns a sorted Lua array of item tables
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)
-- 1. Sort by type
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:
--------------------------------------------------
--------------------------------------------------


-- For other Lua modules
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}}
-- Newline-separated, sorted
function p.get_list(frame)
function p.get_list(frame)
local names = p._get_enabled_item_names_sorted()
return table.concat(p._get_enabled_item_names_sorted(), "\n")
return table.concat(names, "\n")
end
end


-- {{#invoke:Monster Domosed|get_csv}}
-- {{#invoke:Sandbox/Monster Domosed|get_csv}}
-- Comma-separated, sorted (Python-friendly)
function p.get_csv(frame)
function p.get_csv(frame)
local names = p._get_enabled_item_names_sorted()
return table.concat(p._get_enabled_item_names_sorted(), ",")
return table.concat(names, ",")
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