Documentation for this module may be created at Module:Data/Civ4Col/doc
--Sub pages :
--/Buildings
--/Fathers
--/Units
--/Goods
--/Civs
--/Leaders
--/Resources
--/Terrain
--/Traits
--/Promotions
--/Improvements
local p = {}
--Templates
local buildingrow = [[|-
|%s
|%s
|%s
|%s
|%s
]]
local fatherrow = [[|-
|%s
|%s
|%s
]]
local unitrow= [[|-
|%s
|%s
|%s
|%s
|%s
|%s
]]
local goodrow = [[|-
|%s
|%s
|%s
|%s
]]
local resourcerow = [[|-
|%s
|%s
|%s
|%s
]]
local terrainrow = [[|-
|%s
|%s
|%s
|%s
|%s
|%s
|%s
|%s
|%s
|%s
|%s
|%s
|%s
]]
local promotionrow = [[|-
|%s
|%s
|%s
|%s
|%s
]]
--Utility functions
local function Link(s)
return "[["..s.." (Civ4Col)|"..s.."]]"
end
local function LinkAll(t)
local s = ""
local first = true
for k,v in pairs(t) do
s = s..(first and "" or "<br/>")..Link(v)
first = false
end
return s
end
local function LinkPro(t)
local s = ""
local first = true
for k,v in pairs(t) do
s = s..(first and "" or "<br/>").."[["..v.." (Promotion) (Civ4Col)|"..v.."]]"
first = false
end
return s
end
local function LinkImp(t)
local s = ""
local first = true
for k,v in pairs(t) do
s = s..(first and "<nowiki>+</nowiki>1 " or "<br/><nowiki>+</nowiki>1 ")..Link(v)
first = false
end
if s == "<nowiki>+</nowiki>1 [[N/A (Civ4Col)|N/A]]" then
s = "N/A"
end
return s
end
local function attackicon(d)
local s =""
if d then
s = "{{tooltip|{{Gunc4c}}|This unit can initiate attacks.}}"
else
s = "{{tooltip|{{NoMusketCol}}|This unit can only defend.}}"
end
return s
end
local function unitrowvariables(data)
local s =""
if data.hammers then
s = s..(data.hammers or "0").." {{Hammer4}}<br>"..(data.tools or "0").." {{Toolc4c}}"
else
s = s..((data.train and data.train.." {{CoinsC4C}}") or "N/A")
end
return s
end
local function fatherpcosts(data)
local s =""
s = "Political [[Points (Civ4Col)|Points]]:<br>"..math.floor(data.pcost * .78).." Pilgrim<br>"..math.floor(data.pcost * 1.17).." Pioneer<br>"..math.floor(data.pcost * 1.3).." Explorer<br>"..math.floor(data.pcost * 1.43).." Conquistador<br>"..math.floor(data.pcost * 1.49).." Governor<br>"..math.floor(data.pcost * 1.56).." Patriot<br>"..math.floor(data.pcost * 1.62).." Revolutionary"
return s
end
local function fatherocosts(data)
local s =""
if data.rcost then
s= "Religion Points:<br>"..math.floor(data.rcost * .78).." Pilgrim<br>"..math.floor(data.rcost * 1.17).." Pioneer<br>"..math.floor(data.rcost * 1.3).." Explorer<br>"..math.floor(data.rcost * 1.43).." Conquistador<br>"..math.floor(data.rcost * 1.49).." Governor<br>"..math.floor(data.rcost * 1.56).." Patriot<br>"..math.floor(data.rcost * 1.62).." Revolutionary"
else
if data.tcost then
s= "Trade Points:<br>"..math.floor(data.tcost * .78).." Pilgrim<br>"..math.floor(data.tcost * 1.17).." Pioneer<br>"..math.floor(data.tcost * 1.3).." Explorer<br>"..math.floor(data.tcost * 1.43).." Conquistador<br>"..math.floor(data.tcost * 1.49).." Governor<br>"..math.floor(data.tcost * 1.56).." Patriot<br>"..math.floor(data.tcost * 1.62).." Revolutionary"
else
if data.mcost then
s= "Military Points:<br>"..math.floor(data.mcost * .78).." Pilgrim<br>"..math.floor(data.mcost * 1.17).." Pioneer<br>"..math.floor(data.mcost * 1.3).." Explorer<br>"..math.floor(data.mcost * 1.43).." Conquistador<br>"..math.floor(data.mcost * 1.49).." Governor<br>"..math.floor(data.mcost * 1.56).." Patriot<br>"..math.floor(data.mcost * 1.62).." Revolutionary"
else
if data.ecost then
s= "Exploration Points:<br>"..math.floor(data.ecost * .78).." Pilgrim<br>"..math.floor(data.ecost * 1.17).." Pioneer<br>"..math.floor(data.ecost * 1.3).." Explorer<br>"..math.floor(data.ecost * 1.43).." Conquistador<br>"..math.floor(data.ecost * 1.49).." Governor<br>"..math.floor(data.ecost * 1.56).." Patriot<br>"..math.floor(data.ecost * 1.62).." Revolutionary"
else
s = " "
end
end
end
end
return s
end
--Public functions
function p.GetBuildingRow(frame)
local displayname = frame.args[1]
local name = string.gsub(displayname , " %(.*","")
local data = mw.loadData("Module:Data/Civ4Col/Buildings")
local building = data[name]
return frame:preprocess(string.format(buildingrow,
"[[Image:"..displayname.." Icon (Civ4Col).jpg|50px|link="..displayname.." (Civ4Col)]]",
"[["..displayname.." (Civ4Col)|"..name.."]]",
building.reqbuilding and LinkAll(building.reqbuilding) or "None",
(building.pcost or "0").." {{Hammer4}}<br>"..(building.tcost or "0").." {{Toolc4c}}",
building.notes or "None"))
end
local buildingpage = [=[<infobox>
<title><default>%s</default></title>
<image><default>%s</default></image>
<data><label>Required building</label>
<default>%s</default></data>
<data><label>Allows</label>
<default>%s</default></data>
<data><label>{{Hammer4}} required</label>
<default>%s</default></data>
<data><label>{{Toolc4c}} required</label>
<default>%s</default></data>
<data><label>Notes</label>
<default>%s</default></data>
</infobox>
{{BackArrow|List of buildings in Civ4Col|See the list of buildings}}<br>
%s
==Civilopedia==
%s{{#if:{{NAMESPACE}} | |[[Category:Buildings (Civ4Col)]]}}]=]
function p.GetBuildingPage(frame)
local PAGENAME = mw.title.getCurrentTitle().text
local name = string.gsub(PAGENAME, " %(.*","")
local data = mw.loadData("Module:Data/Civ4Col/Buildings")[name]
local vartext = frame.args[1]
if vartext == "{{{1}}}" then
vartext = ""
end
return frame:preprocess(string.format(buildingpage,
name,
"[[Image:"..PAGENAME..".png]]",
data.reqbuilding and LinkAll(data.reqbuilding) or "None",
data.allows and LinkAll(data.allows) or "N/A",
data.pcost or "0",
data.tcost or "0",
data.notes or "None",
vartext or "",
data.cp))
end
function p.GetFatherRow(frame)
local displayname = frame.args[1]
local name = string.gsub(displayname , " %(.*","")
local data = mw.loadData("Module:Data/Civ4Col/Fathers")
local tech = data[name]
return frame:preprocess(string.format(fatherrow,
"[[Image:"..displayname.." (Civ4Col).png|50px|link="..displayname.." (Civ4Col)]]",
"[["..displayname.." (Civ4Col)|"..name.."]]",
tech.bonus or "None"))
end
local fatherpage = [=[<infobox>
<title><default>%s</default></title>
<image><default>%s</default></image>
<data><label>Type</label>
<default>%s</default></data>
<group layout="horizontal"><header>Cost</header>
<data><default>%s</default></data>
<data><default>%s</default></data>
</group>
<data><label>Bonus</label>
<default>%s</default></data>
</infobox>
{{BackArrow|Founding Fathers (Civ4Col)|See the list of founding fathers}}{{#if:{{NAMESPACE}} | |[[Category:Founding Fathers (Civ4Col)]]}}]=]
function p.GetFatherPage(frame)
local PAGENAME = mw.title.getCurrentTitle().text
local name = string.gsub(PAGENAME, " %(.*","")
local data = mw.loadData("Module:Data/Civ4Col/Fathers")
local tech = data[name]
return frame:preprocess(string.format(fatherpage,
name,
"[[Image:"..PAGENAME..".png|256px]]",
tech.type or "None",
fatherpcosts(tech),
fatherocosts(tech),
tech.bonus or "None"))
end
function p.GetGoodRow(frame)
local displayname = frame.args[1]
local name = string.gsub(displayname , " %(.*","")
local data = mw.loadData("Module:Data/Civ4Col/Goods")
local tech = data[name]
return frame:preprocess(string.format(goodrow,
"[[Image:"..displayname.." (Civ4Col).png|50px|link="..displayname.." (Civ4Col)]]",
"[["..displayname.." (Civ4Col)|"..name.."]]",
tech.madefrom or "None",
tech.madeinto or "None"))
end
local goodpage = [=[<infobox>
<title><default>%s</default></title>
<image><default>%s</default></image>
<data><label>Made into</label>
<default>%s</default></data>
<data><label>Made from</label>
<default>%s</default></data>
<data><label>Notes</label>
<default>%s</default></data>
</infobox>
{{BackArrow|Goods (Civ4Col)|Goods}}<br>
%s
==Civilopedia==
%s{{#if:{{NAMESPACE}} | |[[Category:Goods (Civ4Col)]]}}]=]
function p.GetGoodPage(frame)
local PAGENAME = mw.title.getCurrentTitle().text
local name = string.gsub(PAGENAME, " %(.*","")
local data = mw.loadData("Module:Data/Civ4Col/Goods")
local tech = data[name]
local vartext = frame.args[1]
if vartext == "{{{1}}}" then
vartext = ""
end
return frame:preprocess(string.format(goodpage,
name,
"[[Image:"..PAGENAME..".png]]",
tech.madeinto and Link(tech.madeinto) or "None",
tech.madefrom and Link(tech.madefrom) or "None",
tech.notes or "None",
vartext or "",
tech.cp or "None"))
end
local civpage = [=[<infobox>
<title><default>%s</default></title>
<image><default>%s</default></image>
<data><label>Leaders</label>
<default>%s</default></data>
<data><label>Traits</label>
<default>%s</default></data>
</infobox>
{{BackArrow|Civilization IV: Colonization|To Civilization IV: Colonization}}<br>
%s
==Civilopedia==
%s{{#if:{{NAMESPACE}} | |[[Category:Civilizations (Civ4Col)]]}}]=]
function p.GetCivPage(frame)
local PAGENAME = mw.title.getCurrentTitle().text
local name = string.gsub(PAGENAME, " %(.*","")
local data = mw.loadData("Module:Data/Civ4Col/Civs")
local tech = data[name]
local vartext = frame.args[1]
if vartext == "{{{1}}}" then
vartext = ""
end
return frame:preprocess(string.format(civpage,
name,
"[[Image:"..PAGENAME..".png]]",
tech.leaders and LinkAll(tech.leaders) or "None",
tech.traits and LinkAll(tech.traits) or "None",
vartext or "",
tech.cp or "None"))
end
local leaderpage = [=[<infobox>
<title><default>%s</default></title>
<image><default>%s</default></image>
<data><label>Civilization</label>
<default>%s</default></data>
<data><label>Traits</label>
<default>%s</default></data>
</infobox>
{{BackArrow|Civilization IV: Colonization|to Civilization IV: Colonization}}<br>
%s
==Civilopedia==
%s{{#if:{{NAMESPACE}} | |[[Category:Leaders (Civ4Col)]]}}]=]
function p.GetLeaderPage(frame)
local PAGENAME = mw.title.getCurrentTitle().text
local name = string.gsub(PAGENAME, " %(.*","")
local data = mw.loadData("Module:Data/Civ4Col/Leaders")
local tech = data[name]
local vartext = frame.args[1]
if vartext == "{{{1}}}" then
vartext = ""
end
return frame:preprocess(string.format(leaderpage,
name,
"[[Image:"..PAGENAME..".png]]",
tech.civ and Link(tech.civ) or "None",
tech.traits and LinkAll(tech.traits) or "None",
vartext or "",
tech.cp or "None"))
end
local traitpage = [=[<infobox>
<title><default>%s</default></title>
<data><label>Description</label>
<default>%s</default></data>
</infobox>
{{BackArrow|Civilization IV: Colonization|to Civilization IV: Colonization}}{{#if:{{NAMESPACE}} | |[[Category:Traits (Civ4Col)]]}}]=]
function p.GetTraitPage(frame)
local PAGENAME = mw.title.getCurrentTitle().text
local name = string.gsub(PAGENAME, " %(.*","")
local data = mw.loadData("Module:Data/Civ4Col/Traits")[name]
return frame:preprocess(string.format(traitpage,
name,
data.info or "None"))
end
function p.GetUnitRow(frame)
local displayname = frame.args[1]
local name = string.gsub(displayname, " %(.*","")
local data = mw.loadData("Module:Data/Civ4Col/Units")
local unit = data[name]
return frame:preprocess(string.format(unitrow,
"[[Image:"..displayname.." (Civ4Col).jpg|48px|link="..displayname.." (Civ4Col)]]",
"[["..displayname.." (Civ4Col)|"..name.."]]",
unit.reqbuilding and Link(unit.reqbuilding) or "None",
unitrowvariables(unit),
unit.strength or "0",
unit.moves or "None"))
end
local unitpage = [=[<infobox>
<title><default>%s</default></title>
<image><default>%s</default></image>
<data><label>Building required</label>
<default>%s</default></data>
<data><label>{{Hammer4}} required</label>
<default>%s</default></data>
<data><label>{{Toolc4c}} required</label>
<default>%s</default></data>
<data><label>{{Gunc4c}} required</label>
<default>%s</default></data>
<data><label>Train/ purchase in Europe</label>
<default>%s</default></data>
<data><label>Learn from [[Natives (Civ4Col)|Natives]]</label>
<default>%s</default></data>
<data><label>Strength</label>
<default>%s %s</default></data>
<data><label>Moves</label>
<default>%s</default></data>
<data><label>Notes</label>
<default>%s</default></data>
</infobox>
{{BackArrow|List of units (Civ4Col)|See the list of units}}<br>
%s
==Civilopedia==
%s{{#if:{{NAMESPACE}} | |[[Category:Units (Civ4Col)]]}}]=]
function p.GetUnitPage(frame)
local PAGENAME = mw.title.getCurrentTitle().text
local name = string.gsub(PAGENAME, " %(.*","")
local data = mw.loadData("Module:Data/Civ4Col/Units")[name]
local vartext = frame.args[1]
if vartext == "{{{1}}}" then
vartext = ""
end
return frame:preprocess(string.format(unitpage ,
name,
"[[Image:"..PAGENAME..".png|300px]]",
data.reqbuilding and Link(data.reqbuilding) or "None",
data.hammers or "None",
data.tools or "None",
data.guns or "None",
data.train or "N/A",
data.natives or "N/A",
data.strength or "0",
attackicon(data.canattack),
data.moves or "None",
data.notes or "None",
vartext,
data.cp))
end
function p.GetResourceRow(frame)
local displayname = frame.args[1]
local name = string.gsub(displayname , " %(.*","")
local data = mw.loadData("Module:Data/Civ4Col/Resources")
local resource = data[name]
return frame:preprocess(string.format(resourcerow,
"[[Image:"..displayname.." (Resource) (Civ4Col).png|32px|link="..displayname.." (Resource) (Civ4Col)]]",
"[["..displayname.." (Resource) (Civ4Col)|"..name.."]]",
resource.found and LinkAll(resource.found) or "None",
resource.tilebonus or "None"))
end
local resourcepage = [=[<infobox>
<title><default>%s</default></title>
<image><default>%s</default></image>
<data><label>Found in</label>
<default>%s</default></data>
<data><label>Tile bonus</label>
<default>%s</default></data>
</infobox>
{{BackArrow|List of resources in Civ4Col|See the list of resources}}<br>
%s
==Civilopedia==
%s{{#if:{{NAMESPACE}} | |[[Category:Resources (Civ4Col)]]}}]=]
function p.GetResourcePage(frame)
local PAGENAME = mw.title.getCurrentTitle().text
local name = string.gsub(PAGENAME, " %(.*","")
local data = mw.loadData("Module:Data/Civ4Col/Resources")[name]
local vartext = frame.args[1]
if vartext == "{{{1}}}" then
vartext = ""
end
return frame:preprocess(string.format(resourcepage,
name,
"[[Image:"..PAGENAME..".png|100px]]",
data.found and LinkAll(data.found) or "None",
data.tilebonus or "None",
vartext,
data.cp))
end
function p.GetTerrainRow(frame)
local displayname = frame.args[1]
local name = string.gsub(displayname , " %(.*","")
local data = mw.loadData("Module:Data/Civ4Col/Terrain")
local terrain = data[name]
return frame:preprocess(string.format(terrainrow,
"[[Image:"..displayname.." (Civ4Col).png|32px|link="..displayname.." (Civ4Col)]]",
"[["..displayname.." (Civ4Col)|"..name.."]]",
terrain.move or "None",
terrain.defense or "None",
terrain.food or "0",
terrain.tobacco or "0",
terrain.cotton or "0",
terrain.sugar or "0",
terrain.furs or "0",
terrain.lumber or "0",
terrain.ore or "0",
terrain.silver or "0",
terrain.resource and LinkAll(terrain.resource) or "None"))
end
local terrainpage = [=[<infobox>
<title><default>%s</default></title>
<image><default>%s</default></image>
<data><label>[[Food (Civ4Col)|Food]] yield</label>
<default>%s</default></data>
<data><label>Movement cost</label>
<default>%s</default></data>
<data><label>Defense bonus</label>
<default>%s</default></data>
<data><label>[[Tobacco (Civ4Col)|Tobacco]] yield</label>
<default>%s</default></data>
<data><label>[[Cotton (Civ4Col)|Cotton]] yield</label>
<default>%s</default></data>
<data><label>[[Sugar (Civ4Col)|Sugar]] yield</label>
<default>%s</default></data>
<data><label>[[Furs (Civ4Col)|Furs]] yield</label>
<default>%s</default></data>
<data><label>[[Lumber (Civ4Col)|Lumber]] yield</label>
<default>%s</default></data>
<data><label>[[Ore (Civ4Col)|Ore]] yield</label>
<default>%s</default></data>
<data><label>[[Silver (Civ4Col)|Silver]] yield</label>
<default>%s</default></data>
<data><label>Bonus resources</label>
<default>%s</default></data>
<data><label>Notes</label>
<default>%s</default></data>
</infobox>
{{BackArrow|Terrain (Civ4Col)|Terrain}}<br>
%s{{#if:{{NAMESPACE}} | |[[Category:Terrains (Civ4Col)]]}}]=]
function p.GetTerrainPage(frame)
local PAGENAME = mw.title.getCurrentTitle().text
local name = string.gsub(PAGENAME, " %(.*","")
local data = mw.loadData("Module:Data/Civ4Col/Terrain")[name]
local vartext = frame.args[1]
if vartext == "{{{1}}}" then
vartext = ""
end
return frame:preprocess(string.format(terrainpage,
name,
"[[Image:"..PAGENAME..".png|96px]]",
data.food or "0",
data.move or "None",
data.defense or "None",
data.tobacco or "0",
data.cotton or "0",
data.sugar or "0",
data.furs or "0",
data.lumber or "0",
data.ore or "0",
data.silver or "0",
data.resource and LinkAll(data.resource) or "None",
data.notes or "None",
vartext))
end
function p.GetPromotionRow(frame)
local displayname = frame.args[1]
local name = string.gsub(displayname , " %(.*","")
local data = mw.loadData("Module:Data/Civ4Col/Promotions")
local resource = data[name]
return frame:preprocess(string.format(promotionrow,
"[[Image:"..displayname.." (Promotion) (Civ4Col).png|50px|link="..displayname.." (Promotion) (Civ4Col)]]",
"[["..displayname.." (Promotion) (Civ4Col)|"..name.."]]",
resource.requires and LinkPro(resource.requires) or "None",
resource.leadsto and LinkPro(resource.leadsto) or "None",
resource.abilities or "None"))
end
local promotionpage = [=[<infobox>
<title><default>%s</default></title>
<image><default>%s</default></image>
<data><label>Requires</label>
<default>%s</default></data>
<data><label>Leads to</label>
<default>%s</default></data>
<data><label>Available to</label>
<default>%s</default></data>
<data><label>Special abilities</label>
<default>%s</default></data>
</infobox>
{{BackArrow|List of promotions in Civ4Col|See the list of promotions}}<br>
%s
{{#if:{{NAMESPACE}} | |[[Category:Promotions (Civ4Col)]]}}]=]
function p.GetPromotionPage(frame)
local PAGENAME = mw.title.getCurrentTitle().text
local name = string.gsub(PAGENAME, " %(.*","")
local data = mw.loadData("Module:Data/Civ4Col/Promotions")[name]
local vartext = frame.args[1]
if vartext == "{{{1}}}" then
vartext = ""
end
return frame:preprocess(string.format(promotionpage,
name,
"[[Image:"..PAGENAME..".png|100px]]",
data.requires and LinkPro(data.requires) or "None",
data.leadsto and LinkPro(data.leadsto) or "None",
data.available or "None",
data.abilities or "None",
vartext))
end
local improvementpage = [=[<infobox>
<title><default>%s</default></title>
<image><default>%s</default></image>
<data><label>Yields</label>
<default>%s</default></data>
<data><label>Pillaging value</label>
<default>%s</default></data>
<data><label>Notes</label>
<default>%s</default></data>
</infobox>
%s
{{#if:{{NAMESPACE}} | |[[Category:Improvements (Civ4Col)]]}}]=]
function p.GetImprovementPage(frame)
local PAGENAME = mw.title.getCurrentTitle().text
local name = string.gsub(PAGENAME, " %(.*","")
local data = mw.loadData("Module:Data/Civ4Col/Improvements")
local tech = data[name]
local vartext = frame.args[1]
if vartext == "{{{1}}}" then
vartext = ""
end
return frame:preprocess(string.format(improvementpage,
name,
"[[Image:"..PAGENAME..".png]]",
tech.yields and LinkImp(tech.yields) or "None",
tech.pillage.." {{CoinsC4C}}" or "None",
tech.effects or "None",
vartext or ""))
end
return p