|
|
| Line 1: |
Line 1: |
| -- Module:Monster
| |
| local p = {}
| |
| local data = require('Module:MonsterData')
| |
|
| |
|
| ----------------------------------------------------------
| |
| -- Helper: Format drops
| |
| -- two_columns: boolean, whether to make it 2-column (row) or 1-column (infobox)
| |
| ----------------------------------------------------------
| |
| local function formatDrops(drops, frame, two_columns)
| |
| if not drops then return "—" end
| |
| if type(drops) ~= "table" then return drops end
| |
|
| |
| local lines = {}
| |
| for _, drop in ipairs(drops) do
| |
| local drop_icon = drop.name
| |
| if frame and frame.expandTemplate then
| |
| drop_icon = frame:expandTemplate{
| |
| title = "FaviconPaste",
| |
| args = { Name = drop.name }
| |
| }
| |
| end
| |
| local quantity = drop.quantity and (" " .. drop.quantity) or ""
| |
| local chance = drop.chance and (" – " .. drop.chance) or ""
| |
| local line = (two_columns and "<li>" or "* ") .. drop_icon .. quantity .. chance .. (two_columns and "</li>" or "")
| |
| table.insert(lines, line)
| |
| end
| |
|
| |
| if two_columns then
| |
| return "<div style='column-count:2; -moz-column-count:2; -webkit-column-count:2; text-align:left'><ul>"
| |
| .. table.concat(lines, "") .. "</ul></div>"
| |
| else
| |
| return "<div style='text-align:left'><ul>\n" .. table.concat(lines, "\n") .. "\n</ul></div>"
| |
| end
| |
| end
| |
|
| |
| ----------------------------------------------------------
| |
| -- Return a single stat
| |
| ----------------------------------------------------------
| |
| function p.get(frame)
| |
| local args = frame.args
| |
| local name = args.name or args[1]
| |
| local stat = args.stat or args[2]
| |
|
| |
| local e = data[name]
| |
| if not e then
| |
| return "Monster not found: " .. tostring(name)
| |
| end
| |
| if not stat or e[stat] == nil then
| |
| return "Stat not found: " .. tostring(stat)
| |
| end
| |
|
| |
| return e[stat]
| |
| end
| |
|
| |
| ----------------------------------------------------------
| |
| -- Return a single wikitable row (2-column drops)
| |
| ----------------------------------------------------------
| |
| function p.row(frame)
| |
| local args = frame.args
| |
| local name = args.name or args[1]
| |
| local e = data[name]
| |
|
| |
| if not e then
| |
| return "Monster not found: " .. tostring(name)
| |
| end
| |
|
| |
| -- Format drops (2 columns)
| |
| local drops_html = formatDrops(e.drops, frame, true)
| |
|
| |
| -- Format element
| |
| local element = e.element and string.format('<span class="Element %s">%s</span>', e.element, e.element) or '—'
| |
|
| |
| -- Image with name below image
| |
| local image_and_name = e.image and string.format(
| |
| '<div style="text-align:center">[[File:%s|50px|link=%s]]<br>[[%s]]</div>',
| |
| e.image, name, name
| |
| ) or ''
| |
|
| |
| return string.format(
| |
| '|-\n| %s || %s || %s || %s || %s || %s || %s || %s || %s || %s',
| |
| image_and_name,
| |
| element,
| |
| e.level or '',
| |
| e.exp or '',
| |
| e.hp or '',
| |
| e.atk or '',
| |
| e.def or '',
| |
| e.mp or '',
| |
| e.spd or '',
| |
| drops_html
| |
| )
| |
| end
| |
|
| |
| ----------------------------------------------------------
| |
| -- Return only drops (single-column)
| |
| ----------------------------------------------------------
| |
| function p.drops(frame)
| |
| local args = frame.args
| |
| local name = args.name or args[1]
| |
| local e = data[name]
| |
|
| |
| if not e then
| |
| return "Monster not found: " .. tostring(name)
| |
| end
| |
|
| |
| return formatDrops(e.drops, frame, false)
| |
| end
| |
|
| |
| ----------------------------------------------------------
| |
| -- Generate a Portable Infobox (single-column drops)
| |
| ----------------------------------------------------------
| |
| function p.infobox(frame)
| |
| local args = frame.args
| |
| local name = args.name or args[1]
| |
| local e = data[name]
| |
|
| |
| if not e then
| |
| return "Monster not found: " .. tostring(name)
| |
| end
| |
|
| |
| local infobox_params = {
| |
| name = string.format('[[%s|%s]]', name, e.name or name),
| |
| image = e.image and string.format('[[File:%s|link=%s]]', e.image, name) or "",
| |
| element = e.element and string.format('<span class="Element %s">%s</span>', e.element, e.element) or "—",
| |
| level = e.level or "—",
| |
| exp = e.exp or "—",
| |
| hp = e.hp or "—",
| |
| atk = e.atk or "—",
| |
| def = e.def or "—",
| |
| mp = e.mp or "—",
| |
| spd = e.spd or "—",
| |
| drops = formatDrops(e.drops, frame, false)
| |
| }
| |
|
| |
| return frame:expandTemplate{
| |
| title = "Monster/Infobox",
| |
| args = infobox_params
| |
| }
| |
| end
| |
|
| |
| return p
| |