Module:Industries
Appearance
Documentation for this module may be created at Module:Industries/doc
local module = {}
local maps = require("Module:Maps")
local cargo_module = require("Module:Cargo")
module.industries = {
-- TIER 1 --
["Water Pumping Station"] = {
tier = 1,
required_cargo = {},
bonus_cargo = {"Machinery", "Cordwood"},
produced_cargo = {"Water"}
},
["Farm"] = {
tier = 1,
required_cargo = {},
bonus_cargo = {"Tools", "Water"},
produced_cargo = {"Cattle", "Grain"}
},
["Ranch"] = {
tier = 1,
required_cargo = {},
bonus_cargo = {"Tools"},
produced_cargo = {"Cattle"}
},
["Forest Camp"] = {
tier = 1,
required_cargo = {},
bonus_cargo = {"Tools"},
produced_cargo = {"Logs", "Cordwood"}
},
["Fishery"] = {
tier = 1,
required_cargo = {},
bonus_cargo = {"Tools", "Cordwood", "Machinery"},
produced_cargo = {"Fish"}
},
["Sand Bar"] = {
tier = 1,
required_cargo = {},
bonus_cargo = {"Tools", "Cordwood", "Machinery"},
produced_cargo = {"Sand"}
},
["Clay Pit"] = {
tier = 1,
required_cargo = {},
bonus_cargo = {"Tools", "Cordwood", "Machinery"},
produced_cargo = {"Clay"}
},
-- TIER 2 --
["Distillery"] = {
tier = 2,
required_cargo = {{"Grain"}, {"Cordwood"}, {"Water"}},
bonus_cargo = {"Pipes", "Iron Ingots"},
produced_cargo = {"Rum"}
},
["Lumber Mill"] = {
tier = 2,
required_cargo = {{"Logs"}},
bonus_cargo = {"Coal", "Machinery"},
produced_cargo = {"Lumber", "Beams", "Wood Pulp"}
},
["Pulp Mill"] = {
tier = 2,
required_cargo = {{"Logs"}},
bonus_cargo = {"Coal", "Machinery"},
produced_cargo = {"Wood Pulp"}
},
["Slaughterhouse"] = {
tier = 2,
required_cargo = {{"Cattle"}, {"Cordwood"}},
bonus_cargo = {"Tools"},
produced_cargo = {"Leather", "Food", "Grease"}
},
["Food Factory"] = {
tier = 2,
required_cargo = {{"Cordwood"}, {"Grain", "Fish"}},
bonus_cargo = {"Tools", "Machinery"},
produced_cargo = {"Food"}
},
["Brickworks"] = {
tier = 2,
required_cargo = {{"Clay"}, {"Gravel"}, {"Cordwood", "Coal"}},
bonus_cargo = {"Tools"},
produced_cargo = {"Bricks"}
},
-- TIER 3 --
["Paper Mill"] = {
tier = 3,
required_cargo = {{"Water"}, {"Wood Pulp"}},
bonus_cargo = {"Coal", "Machinery"},
produced_cargo = {"Paper"}
},
["Iron Mine"] = {
tier = 3,
required_cargo = {{"Lumber"}, {"Beams"}},
bonus_cargo = {"Tools", "Rails", "Kerosene"},
produced_cargo = {"Iron Ore", "Gravel", "Water"}
},
["Gold Mine"] = {
tier = 3,
required_cargo = {{"Lumber"}, {"Beams"}},
bonus_cargo = {"Tools", "Rails", "Kerosene"},
produced_cargo = {"Gold Ore", "Gravel", "Water"}
},
["Copper Mine"] = {
tier = 3,
required_cargo = {{"Lumber"}, {"Coal", "Cordwood"}},
bonus_cargo = {"Machinery", "Tools", "Rails", "Kerosene"},
produced_cargo = {"Copper Ore", "Gravel", "Water"}
},
["Bauxite Mine"] = {
tier = 3,
required_cargo = {{"Beams"}},
bonus_cargo = {"Tools", "Lumber"},
produced_cargo = {"Bauxite Ore", "Gravel", "Water"}
},
["Quarry"] = {
tier = 3,
required_cargo = {{"Beams"}},
bonus_cargo = {"Tools", "Kerosene"},
produced_cargo = {"Cut Stone", "Gravel", "Coal"}
},
["Tannery"] = {
tier = 3,
required_cargo = {{"Leather"}, {"Cordwood"}},
bonus_cargo = {"Tools", "Chemicals"},
produced_cargo = {"Textiles"}
},
-- TIER 4 --
["Iron Works"] = {
tier = 4,
required_cargo = {{"Iron Ore"}, {"Cordwood", "Coal"}},
bonus_cargo = {"Tools", "Kerosene"},
produced_cargo = {"Iron Ingots", "Rails"}
},
["Copper Works"] = {
tier = 4,
required_cargo = {{"Copper Ore"}, {"Cordwood", "Coal"}},
bonus_cargo = {"Tools", "Kerosene"},
produced_cargo = {"Copper Ingots", "Pipes"}
},
["Aluminium Plant"] = {
tier = 4,
required_cargo = {{"Bauxite Ore"}, {"Cordwood", "Coal"}},
bonus_cargo = {"Tools"},
produced_cargo = {"Aluminium Ingots"}
},
-- TIER 5 --
["Machine Shop"] = {
tier = 5,
required_cargo = {{"Coal"}, {"Copper Ingots", "Aluminium Ingots", "Iron Ingots"}},
bonus_cargo = {"Grease"},
produced_cargo = {"Tools", "Machinery"}
},
-- TIER 6 --
["Coal Mine"] = {
tier = 6,
required_cargo = {{"Rails"}, {"Lumber"}, {"Tools"}, {"Beams"}},
bonus_cargo = {"Machinery", "Kerosene"},
produced_cargo = {"Coal", "Gravel", "Uncut Gems", "Water"}
},
["Shipyard"] = {
tier = 6,
required_cargo = {{"Machinery"}, {"Tools"}, {"Coal"}, {"Iron Ingots"}},
bonus_cargo = {},
produced_cargo = {}
},
-- TIER 7 --
["Gold Smith"] = {
tier = 7,
required_cargo = {{"Gold Ore"}, {"Uncut Gems"}, {"Cordwood", "Coal"}},
bonus_cargo = {"Tools"},
produced_cargo = {"Jewelry"}
},
["Oil Well"] = {
tier = 7,
required_cargo = {{"Pipes"}, {"Machinery"}, {"Beams"}, {"Tools"}},
bonus_cargo = {"Grease"},
produced_cargo = {"Crude Oil"}
},
-- TIER 8 --
["Oil Refinery"] = {
tier = 8,
required_cargo = {{"Coal"}, {"Crude Oil"}, {"Cordwood"}},
bonus_cargo = {"Pipes", "Machinery", "Iron Ingots"},
produced_cargo = {"Grease", "Kerosene", "Chemicals"}
},
}
module.industries["Cactus Camp"] = module.industries["Forest Camp"]
module.industries["Smelter"] = module.industries["Iron Works"]
module.industries["Copper Smelter"] = module.industries["Copper Works"]
local roman_numerals = { "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X" }
local function wrapLink(text)
return "[["..text.."]]"
end
function getIndustryPageRow(frame)
-- Industry Name|Map Name?
local info, map = module.industries[frame.args[1]], frame.args[2]
local out = "|-\n| style=\"text-align:left;\"|" .. roman_numerals[info.tier]
.. "\n| style=\"text-align:left;\"|'''<span id=" .. frame.args[1]:gsub(" ", "_") .. ">" .. frame.args[1] .. "</span>'''"
if #info.required_cargo == 0 then
out = out .. "\n| style=\"text-align:left;color: green\"|''No Items Required''"
else
out = out .. "\n| style=\"text-align:left;\"|"
local text_list = {}
for _, cargo_list in pairs(info.required_cargo) do
local text = ""
if #cargo_list > 1 then text = text .. "<br>" end
local index = 1
for _, cargo in pairs(cargo_list) do
assert(cargo_module.cargo[cargo], "invalid:" .. cargo)
if (not map) or cargo_module.cargo[cargo].maps[map] then
if index > 1 then text = text .. " '''OR''' " end
index = index + 1
text = text .. wrapLink(cargo)
end
end
table.insert(text_list, text)
end
out = out .. table.concat(text_list, ", ")
end
out = out .. "\n| style=\"text-align:left;\"|"
local index = 1
for _, cargo in pairs(info.bonus_cargo) do
assert(cargo_module.cargo[cargo], "invalid:" .. cargo)
if (not map) or cargo_module.cargo[cargo].maps[map] then
if index > 1 then out = out .. ", " end
index = index + 1
out = out .. wrapLink(cargo)
end
end
out = out .. "\n| style=\"text-align:left;\"|"
index = 1
for _, cargo in pairs(info.produced_cargo) do
assert(cargo_module.cargo[cargo], "invalid:" .. cargo)
if (not map) or cargo_module.cargo[cargo].maps[map] then
if index > 1 then out = out .. ", " end
index = index + 1
out = out .. wrapLink(cargo)
end
end
return out
end
function module.getIndustryPage(frame)
-- Map Name?
local map = frame.args[1]
local out = ""
local sortable_industries = {}
local invalid_industries = {}
if map then
for name in pairs(maps.maps[map].industries) do
if not module.industries[name] then
table.insert(invalid_industries, name)
else
local info = module.industries[name]
info.name = name
table.insert(sortable_industries, info)
end
end
else
for name, info in pairs(module.industries) do
info.name = name
table.insert(sortable_industries, info)
end
end
table.sort(sortable_industries, function(a, b) return a.tier < b.tier end)
for _, info in pairs(sortable_industries) do
out = out .. getIndustryPageRow({args = {info.name, map}}) .. "\n"
end
if #invalid_industries > 0 then
-- :c
out = out .. "<br> invalid:" .. table.concat(invalid_industries, ", ")
end
return out
end
return module