Jump to content

Module:MonsterDrops: Difference between revisions

From Apogea Wiki
Dane (talk | contribs)
Create Lua module for monster drops with sprite lookup (via create-page on MediaWiki MCP Server)
Tag: Recreated
 
Dane (talk | contribs)
Use x2 multiplier for sprites (via update-page on MediaWiki MCP Server)
Line 51: Line 51:
          
          
         table.insert(html, '|-')
         table.insert(html, '|-')
         table.insert(html, string.format('| {{Sprite|%s|32}}', sprite))
         table.insert(html, string.format('| {{Sprite|%s|x2}}', sprite))
         table.insert(html, string.format('| [[%s]]', drop.item))
         table.insert(html, string.format('| [[%s]]', drop.item))
         table.insert(html, string.format('| %s', quantity))
         table.insert(html, string.format('| %s', quantity))

Revision as of 00:52, 28 January 2026

Documentation for this module may be created at Module:MonsterDrops/doc

local p = {}

-- Get sprite for an item from Cargo, fallback to item name
local function getItemSprite(itemName)
    local result = mw.ext.cargo.query('Items', 'sprite', {
        where = 'name="' .. itemName .. '"',
        limit = 1
    })
    
    if result and result[1] and result[1].sprite and result[1].sprite ~= '' then
        return result[1].sprite
    end
    return itemName
end

-- Format quantity display
local function formatQuantity(min, max)
    if not min or min == '' then
        return '?'
    end
    if not max or max == '' or min == max then
        return tostring(min)
    end
    return min .. '-' .. max
end

-- Main function to display monster drops
function p.display(frame)
    local args = frame:getParent().args
    local source = args.source or mw.title.getCurrentTitle().text
    local sourceType = args.type or 'Monster'
    
    -- Query ItemSource for drops
    local drops = mw.ext.cargo.query('ItemSource', 'item,rarity,min,max', {
        where = 'source="' .. source .. '" AND source_type="' .. sourceType .. '"'
    })
    
    if not drops or #drops == 0 then
        return ''
    end
    
    -- Build table
    local html = {}
    table.insert(html, '{| class="wikitable"')
    table.insert(html, '|-')
    table.insert(html, '! !! Item !! Quantity !! Rarity')
    
    for _, drop in ipairs(drops) do
        local sprite = getItemSprite(drop.item)
        local quantity = formatQuantity(drop.min, drop.max)
        
        table.insert(html, '|-')
        table.insert(html, string.format('| {{Sprite|%s|x2}}', sprite))
        table.insert(html, string.format('| [[%s]]', drop.item))
        table.insert(html, string.format('| %s', quantity))
        table.insert(html, string.format('| %s', drop.rarity or ''))
    end
    
    table.insert(html, '|}')
    
    return frame:preprocess(table.concat(html, '\n'))
end

return p