Civilization Wiki
Advertisement

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
Advertisement