Module:BuildingTable: Difference between revisions

From Corsair Cove Official Wiki
Dorce (talk | contribs)
No edit summary
Dorce (talk | contribs)
No edit summary
Line 113: Line 113:
     return table.concat(out, "\n")
     return table.concat(out, "\n")
end
end


function p.principle(frame)
function p.principle(frame)
Line 127: Line 126:
end
end
         if (building.theme == "Seafaring" or
         if building.category == "Principle" then
        building.theme == "Notoriety" or
        building.theme == "Empire" or
        building.theme == "Wealth")
        and building.housing == 0 then
             local cost = "''None''"
             local cost = "''None''"
              
              
Line 151: Line 146:
                building.description,
                building.description,
                building.unlocked_by_1 or "",
                building.unlocked_by_1 or "",
                stackFormat(building.construction) or "''None''"
            )
        )
    end
    end
    table.insert(out, "|}")
    return table.concat(out, "\n")
end
function p.principle(frame)
    local out = {}
    table.insert(out, '{| class="wikitable sortable"')
    table.insert(out, '!class="unsortable"| Icon !! Name !! Dedicated Workers<br/>Without [[Pirates|Drifters]] !! Function !! Resource Input !! Building Cost')
    for _, building in pairs(data) do
        local icon = building.building_icon_filename
if icon == nil or icon == "" then
    icon = "T ICO resource Hardwood.png"
end
        if building.category == "Community" then
            local cost = "''None''"
           
        -- Build construction cost string
        local parts = {}
        for _, item in ipairs(building.construction or {}) do
            if item.qty > 0 and item.resource ~= "" then
                table.insert(parts,
                    string.format("%d [[%s]]", item.qty, item.resource))
            end
        end
        table.insert(out, "|-")
        table.insert(out,
            string.format(
                "|  {{Producer icon|T ICO resource Hardwood.png |size=lg}} || [[%s]] || %d [[Pirates|Builders]] || %s || %s || %s",
                -- icon,
                building.name,
                building.hands_builders,
                building.description,
                stackFormat(building.community_upkeep) or "''None''",
                stackFormat(building.construction) or "''None''"
                stackFormat(building.construction) or "''None''"
            )
            )

Revision as of 12:23, 1 August 2026

This module can display buildings from the 4 separate major categories.

  • Housing
  • Production
  • Community
  • Principle

Each category table displays relevant stats for that respective category.


local p = {}

local data = require("Module:BuildingData")

local function stackFormat(inputs)
    if not inputs then
        return "'None'"
    end

    local parts = {}

    for _, item in ipairs(inputs) do
        if item.resource ~= "" and (item.qty or 0) > 0 then
            table.insert(parts, item.resource .. "=" .. item.qty)
        end
    end

    if #parts == 0 then
        return "''None''"
    end

    return "{{Resource stack|" .. table.concat(parts, "|") .. "}}"
end

function p.producers(frame)
    local out = {}

    table.insert(out, '{| class="wikitable sortable"')
    table.insert(out, '!class="unsortable"| Icon !! Name !! Category !! Dedicated Workers !! Product !! Input !! Building Cost')

    for _, building in pairs(data) do
        local icon = building.building_icon_filename
		if icon == nil or icon == "" then
		    icon = "T ICO resource Hardwood.png"
		end
		
        local workers = (building.hands_greenhands or 0) + (building.hands_masterhands or 0)

        if workers > 0 then
            local cost = "''None''"

            -- Build construction cost string
            local parts = {}
            for _, item in ipairs(building.construction or {}) do
                if item.qty > 0 and item.resource ~= "" then
                    table.insert(parts,
                        string.format("%d [[%s]]", item.qty, item.resource))
                end
            end

            table.insert(out, "|-")
            table.insert(out,
                string.format(
                    "|  {{Producer icon|T ICO resource Hardwood.png |size=lg}} || [[%s]] || %s || %d [[Pirates|Greenhands]] || [[%s]] || %s || %s",
                    -- icon,
                    building.name,
                    building.category,
                    workers,
                    building.production_output or "",
                    stackFormat(building.production_input) or "''None''",
                    stackFormat(building.construction) or "''None''"
                )
            )
        end
    end

    table.insert(out, "|}")

    return table.concat(out, "\n")
end


function p.housing(frame)
    local out = {}

    table.insert(out, '{| class="wikitable sortable"')
    table.insert(out, '!class="unsortable"| Icon !! Name !! Capacity !! Unlock Requirement !! Building Cost')

    for _, building in pairs(data) do
        local icon = building.building_icon_filename
		if icon == nil or icon == "" then
		    icon = "T ICO resource Hardwood.png"
		end
		
        if building.housing > 0 then
            local cost = "''None''"
            
	        -- Build construction cost string
	        local parts = {}
	        for _, item in ipairs(building.construction or {}) do
	            if item.qty > 0 and item.resource ~= "" then
	                table.insert(parts,
	                    string.format("%d [[%s]]", item.qty, item.resource))
	            end
	        end
	
	        table.insert(out, "|-")
	        table.insert(out,
	            string.format(
	                "|  {{Producer icon|T ICO resource Hardwood.png |size=lg}} || [[%s]] || %d || %s || %s",
	                -- icon,
	                building.name,
	                building.housing,
	                building.unlocked_by_1 or "",
	                stackFormat(building.construction) or "''None''"
	            )
	        )
	    end
    end

    table.insert(out, "|}")

    return table.concat(out, "\n")
end

function p.principle(frame)
    local out = {}

    table.insert(out, '{| class="wikitable sortable"')
    table.insert(out, '!class="unsortable"| Icon !! Name !! Effect !! Unlock Requirement !! Building Cost')

    for _, building in pairs(data) do
        local icon = building.building_icon_filename
		if icon == nil or icon == "" then
		    icon = "T ICO resource Hardwood.png"
		end
		
        if building.category == "Principle" then
            local cost = "''None''"
            
	        -- Build construction cost string
	        local parts = {}
	        for _, item in ipairs(building.construction or {}) do
	            if item.qty > 0 and item.resource ~= "" then
	                table.insert(parts,
	                    string.format("%d [[%s]]", item.qty, item.resource))
	            end
	        end
	
	        table.insert(out, "|-")
	        table.insert(out,
	            string.format(
	                "|  {{Producer icon|T ICO resource Hardwood.png |size=lg}} || [[%s]] || %s || %s || %s",
	                -- icon,
	                building.name,
	                building.description,
	                building.unlocked_by_1 or "",
	                stackFormat(building.construction) or "''None''"
	            )
	        )
	    end
    end

    table.insert(out, "|}")

    return table.concat(out, "\n")
end

function p.principle(frame)
    local out = {}

    table.insert(out, '{| class="wikitable sortable"')
    table.insert(out, '!class="unsortable"| Icon !! Name !! Dedicated Workers<br/>Without [[Pirates|Drifters]] !! Function !! Resource Input !! Building Cost')

    for _, building in pairs(data) do
        local icon = building.building_icon_filename
		if icon == nil or icon == "" then
		    icon = "T ICO resource Hardwood.png"
		end
		
        if building.category == "Community" then
            local cost = "''None''"
            
	        -- Build construction cost string
	        local parts = {}
	        for _, item in ipairs(building.construction or {}) do
	            if item.qty > 0 and item.resource ~= "" then
	                table.insert(parts,
	                    string.format("%d [[%s]]", item.qty, item.resource))
	            end
	        end
	
	        table.insert(out, "|-")
	        table.insert(out,
	            string.format(
	                "|  {{Producer icon|T ICO resource Hardwood.png |size=lg}} || [[%s]] || %d [[Pirates|Builders]] || %s || %s || %s",
	                -- icon,
	                building.name,
	                building.hands_builders,
	                building.description,
	                stackFormat(building.community_upkeep) or "''None''",
	                stackFormat(building.construction) or "''None''"
	            )
	        )
	    end
    end

    table.insert(out, "|}")

    return table.concat(out, "\n")
end

return p