Path of Exile Wiki

Please consider helping keep the wiki up to date. Check the to-do list of updates needed for version 3.14.0.

Game data exports will becoming later as the technical changes in addition to regular changes take some more time.

READ MORE

Path of Exile Wiki
Advertisement
--
-- Module for bestiary templates
--

local m_util = require('Module:Util')
local m_cargo = require('Module:Cargo')
local getArgs = require('Module:Arguments').getArgs

local p = {}

-- ----------------------------------------------------------------------------
-- Strings
-- ----------------------------------------------------------------------------

local i18n = {
    errors = {
        invalid_table = 'Table supplied is invalid',
    },
}

--mw.loadData('Module:QuestReward/vendor_reward_data')

-- ----------------------------------------------------------------------------
-- Helper functions and globals
-- ----------------------------------------------------------------------------

-- ----------------------------------------------------------------------------
-- Cargo
-- ----------------------------------------------------------------------------

local tables = {}

tables.recipes = {
    table = 'bestiary_recipes',
    fields = {
        id = {
            field = 'id',
            type = 'String',
        },
        header = {
            field = 'header',
            type = 'Text',
        },
        subheader = {
            field = 'subheader',
            type = 'Text',
        },
        notes = {
            field = 'notes',
            type = 'Text',
        },
    },
}

tables.components = {
    table = 'bestiary_components',
    fields = {
        id = {
            field = 'id',
            type = 'String',
        },
        min_level = {
            field = 'min_level',
            type = 'Intenger',
        },
        rarity = {
            field = 'rarity',
            type = 'String',
        },
        family = {
            field = 'family',
            type = 'String',
        },
        -- cargo is complaining. Rename to group when able
        beast_group = {
            field = 'beast_group',
            type = 'String',
        },
        genus = {
            field = 'genus',
            type = 'String',
        },
        mod_id = {
            field = 'mod_id',
            type = 'String',
        },
        monster = {
            field = 'monster',
            type = 'String',
        },
    },
}

tables.recipe_components = {
    table = 'bestiary_recipe_components',
    fields = {
        recipe_id = {
            field = 'recipe_id',
            type = 'String',
        },
        component_id = {
            field = 'component_id',
            type = 'String',
        },
        amount = {
            field = 'amount',
            type = 'Integer',
        },
    },
}

-- ----------------------------------------------------------------------------
-- Page functions
-- ----------------------------------------------------------------------------

local p = {}

p.table_bestiary_recipes = m_cargo.declare_factory{data=tables.recipes}
p.table_bestiary_components = m_cargo.declare_factory{data=tables.components}
p.table_bestiary_recipe_components = m_cargo.declare_factory{data=tables.recipe_components}

p.store_data = m_cargo.store_from_lua{tables=tables, module='Bestiary'}

function p.recipe_table(frame)
    -- Get args
    tpl_args = getArgs(frame, {
        parentFirst = true
    })
    frame = m_util.misc.get_frame(frame)
    
    local results = m_cargo.query(
        {'bestiary_recipes', 'bestiary_recipe_components', 'bestiary_components', 'mods'},
        {
            'bestiary_recipes.id',
            'bestiary_recipes.header',
            'bestiary_recipes.subheader',
            'bestiary_recipes.notes',
            'bestiary_recipe_components.amount',
            'bestiary_components.min_level',
            'bestiary_components.rarity',
            'bestiary_components.family',
            'bestiary_components.beast_group',
            'bestiary_components.genus',
            'bestiary_components.monster',
            'mods.name',
        },
        {
            join='bestiary_recipes.id=bestiary_recipe_components.recipe_id, bestiary_recipe_components.component_id=bestiary_components.id, bestiary_components.mod_id=mods.id',
            where=tpl_args.q_where,
            limit=9999,
        }
    )
    
    local order = m_cargo.query(
        {'bestiary_recipes'},
        {'bestiary_recipes.id'},
        {
            limit=9999,
            orderBy='bestiary_recipes.header, bestiary_recipes.subheader',
        }
    )
    
    results = m_cargo.map_results_to_id{results=results, field='bestiary_recipes.id'}
    
    local tbl = mw.html.create('table')
    tbl
        :attr('class', 'wikitable sortable')
        :tag('tr')
            :tag('th')
                :wikitext('Header')
                :done()
            :tag('th')
                :wikitext('Subheader')
                :done()
            :tag('th')
                :wikitext('Notes')
                :done()
            :tag('th')
                :wikitext('Components')
                :done()
                
    for _, order_row in ipairs(order) do
        local row = results[order_row['bestiary_recipes.id']]
        
        local components = {}
        for _, component in ipairs(row) do
            components[#components+1] = string.format('%sx ', component['bestiary_recipe_components.amount'])
            
            if component['bestiary_components.min_level'] and component['bestiary_components.min_level'] ~= '0' then
                components[#components] = components[#components] .. string.format('level %s+ ', component['bestiary_components.min_level'])
            end
            
            if component['bestiary_components.family'] ~= 'Any Creature' then
                components[#components] = components[#components] .. '[['
            end
            
            for _, key in ipairs({'bestiary_components.rarity',
                                  'bestiary_components.family',
                                  'bestiary_components.beast_group',
                                  'bestiary_components.genus',
                                  'bestiary_components.monster'}) do
                if component[key] then
                    components[#components] = components[#components] .. component[key] .. ' '
                end
            end
            
            if component['bestiary_components.family'] ~= 'Any Creature' then
                components[#components] = components[#components] .. ']]'
            end
            
            if component['mods.name'] then
                components[#components] = components[#components] .. string.format('with modifier "%s"', component['mods.name'])
            end
        end
        
        tbl
            :tag('tr')
                :tag('td')
                    :wikitext(row[1]['bestiary_recipes.header'] or '')
                    :done()
                :tag('td')
                    :wikitext(row[1]['bestiary_recipes.subheader'] or '')
                    :done()
                :tag('td')
                    :wikitext(row[1]['bestiary_recipes.notes'] or '')
                    :done()
                :tag('td')
                    :wikitext(table.concat(components, '<br>'))
                    :done()
    end
    
    return tostring(tbl)
end

-- ----------------------------------------------------------------------------
-- End
-- ----------------------------------------------------------------------------

return p
Advertisement