Module:Necropolis packs/sandbox: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
(2 intermediate revisions by the same user not shown) | |||
Line 7: | Line 7: | ||
local m_monsters = mw.loadData('Module:Monster_packs/data') | local m_monsters = mw.loadData('Module:Monster_packs/data') | ||
local function _show_monsters(pack_ids) | local function _show_monsters(pack_ids, show_areas) | ||
local result = {} | local result = {""} | ||
-- #pack_ids doesn't work? | -- #pack_ids doesn't work? | ||
if not pack_ids[1] then | if not pack_ids[1] then | ||
Line 34: | Line 34: | ||
if pack.boss_chance ~= 0 then | if pack.boss_chance ~= 0 then | ||
if pack.boss_count == 1 then | if pack.boss_count == 1 then | ||
line = "** Leader | line = "** Leader" | ||
else | else | ||
line = "** " .. pack.boss_count .. " leaders (" .. pack.boss_chance .. "% chance): " | line = "** " .. pack.boss_count .. " leaders" | ||
end | |||
if pack.boss_chance == 100 then | |||
line = line .. ": " | |||
else | |||
line = line .. " (" .. pack.boss_chance .. "% chance): " | |||
end | end | ||
for i, monster in ipairs(pack.boss_monsters) do | for i, monster in ipairs(pack.boss_monsters) do | ||
Line 46: | Line 51: | ||
result[#result+1] = line | result[#result+1] = line | ||
end | end | ||
line = "** Areas: " | if show_areas then | ||
line = "** Areas: " | |||
for i, area in ipairs(pack.areas) do | |||
line = line .. ", " | if i ~= 1 then | ||
line = line .. ", " | |||
end | |||
line = line .. string.format("[[Area:%s|%s]] (%s)", string.gsub(area.area_id, "_", "~"), area.name, area.weight) | |||
end | end | ||
result[#result+1] = line | |||
end | end | ||
end | end | ||
return table.concat(result, '\n') | return table.concat(result, '\n') | ||
Line 59: | Line 66: | ||
local function _expand_template(data) | local function _expand_template(data) | ||
return m_util.string. | return m_util.string.trim(mw.getCurrentFrame():expandTemplate{ | ||
title = use_sandbox and 'Template:Necropolis pack/display/sandbox' or 'Template:Necropolis pack/display', | title = use_sandbox and 'Template:Necropolis pack/display/sandbox' or 'Template:Necropolis pack/display', | ||
args = { | args = { | ||
Line 82: | Line 89: | ||
local data = m_data[pack_id] | local data = m_data[pack_id] | ||
if tpl_args.pack_composition and data.monster_pack_ids then | if tpl_args.pack_composition and data.monster_pack_ids then | ||
return mw.getCurrentFrame():preprocess(_expand_template(data) .. "\n" .. _show_monsters(data.monster_pack_ids)) | return mw.getCurrentFrame():preprocess(_expand_template(data) .. "\n" .. _show_monsters(data.monster_pack_ids, tpl_args.pack_areas)) | ||
else | else | ||
return mw.getCurrentFrame():preprocess(_expand_template(data)) | return mw.getCurrentFrame():preprocess(_expand_template(data)) | ||
Line 93: | Line 100: | ||
all[#all+1] = _expand_template(data) | all[#all+1] = _expand_template(data) | ||
if data.monster_pack_ids then | if data.monster_pack_ids then | ||
all[#all+1] = _show_monsters(data.monster_pack_ids) | all[#all+1] = _show_monsters(data.monster_pack_ids, true) | ||
end | end | ||
end | end |
Latest revision as of 01:26, 24 April 2024
This is the module sandbox page for Module:Necropolis packs (diff).
The above documentation is transcluded from Module:Necropolis packs/doc.
Editors can experiment in this module's sandbox and testcases pages.
Please add categories to the /doc subpage. Subpages of this module.
Editors can experiment in this module's sandbox and testcases pages.
Please add categories to the /doc subpage. Subpages of this module.
require('Module:No globals')
local m_util = require('Module:Util')
local use_sandbox = m_util.misc.maybe_sandbox('Necropolis_packs')
local m_data = mw.loadData('Module:Necropolis_packs/data')
local m_lookup = mw.loadData('Module:Necropolis_pack_lookup/data')
local m_monsters = mw.loadData('Module:Monster_packs/data')
local function _show_monsters(pack_ids, show_areas)
local result = {""}
-- #pack_ids doesn't work?
if not pack_ids[1] then
return "No known monsters are associated with this pack."
elseif not pack_ids[2] then
result[#result+1] = "Pack composition (not visible through the lantern):"
else
result[#result+1] = "Pack composition (not visible through the lantern) - one of:"
end
for _, pack_id in ipairs(pack_ids) do
local pack = m_monsters[pack_id]
local line = "* Pack size: " .. pack.min_count .. '-' .. pack.max_count
if pack.additional_count ~= 0 then
line = line .. '+' .. pack.additional_count
end
result[#result+1] = line
line = "** Monsters: "
for i, monster in ipairs(pack.monsters) do
if i ~= 1 then
line = line .. ", "
end
line = line .. string.format("[[Monster:%s|%s]]", string.gsub(monster.monster_id, "_", "~"), monster.name)
end
result[#result+1] = line
if pack.boss_chance ~= 0 then
if pack.boss_count == 1 then
line = "** Leader"
else
line = "** " .. pack.boss_count .. " leaders"
end
if pack.boss_chance == 100 then
line = line .. ": "
else
line = line .. " (" .. pack.boss_chance .. "% chance): "
end
for i, monster in ipairs(pack.boss_monsters) do
if i ~= 1 then
line = line .. ", "
end
line = line .. string.format("[[Monster:%s|%s]]", string.gsub(monster.monster_id, "_", "~"), monster.name)
end
result[#result+1] = line
end
if show_areas then
line = "** Areas: "
for i, area in ipairs(pack.areas) do
if i ~= 1 then
line = line .. ", "
end
line = line .. string.format("[[Area:%s|%s]] (%s)", string.gsub(area.area_id, "_", "~"), area.name, area.weight)
end
result[#result+1] = line
end
end
return table.concat(result, '\n')
end
local function _expand_template(data)
return m_util.string.trim(mw.getCurrentFrame():expandTemplate{
title = use_sandbox and 'Template:Necropolis pack/display/sandbox' or 'Template:Necropolis pack/display',
args = {
name = data.name,
description = data.description,
leader = data.leader
}
})
end
local function _render_pack(tpl_args)
tpl_args = tpl_args or {}
local pack_id = tpl_args.pack_id
if tpl_args.item_name and not pack_id then
local found = m_lookup[tpl_args.item_name]
if not found then
return
end
pack_id = found.pack_id
end
if pack_id then
local data = m_data[pack_id]
if tpl_args.pack_composition and data.monster_pack_ids then
return mw.getCurrentFrame():preprocess(_expand_template(data) .. "\n" .. _show_monsters(data.monster_pack_ids, tpl_args.pack_areas))
else
return mw.getCurrentFrame():preprocess(_expand_template(data))
end
else
local all = {"==All known packs=="}
for _, data in pairs(m_data) do
if data.name and data.name ~= '' then
all[#all+1] = "===" .. data.name .. "==="
all[#all+1] = _expand_template(data)
if data.monster_pack_ids then
all[#all+1] = _show_monsters(data.monster_pack_ids, true)
end
end
end
return mw.getCurrentFrame():preprocess(table.concat(all, '\n'))
end
end
local p = {}
p.render_pack = m_util.misc.invoker_factory(_render_pack)
return p