View difference between Paste ID: 9ZYSSW5Q and JkCeFdpL
SHOW: | | - or go back to the newest paste.
1
--[[-----------------------------------------
2
Name:		 GetCivSpecificUnit
3
Purpose: 	 Get the UnitType for a specific
4
civ from a UnitClassType.
5
-------------------------------------------]]
6
function fnGetCivSpecificUnit(pPly, sUnitClass) -- Thanks whoward69
7
8
	-- BEGIN DEFINES
9
	local sUnitType = nil
10
	local sCivType 	= GameInfo.Civilizations[pPly:GetCivilizationType()].Type
11
	-- END DEFINES
12
	
13-
	-- Loop through civilization-specific UnitClass overrides, id est their unique units, and 
13+
	--[ Loop through civilization-specific UnitClass overrides, id est their unique units, and 
14-
	yield to be returned the proper UnitType. 
14+
	yield to be returned the proper UnitType. --] 
15
	for pOverride in GameInfo.Civilization_UnitClassOverrides{CivilizationType = sCivType,
16
	UnitClassType = sUnitClass} do
17
		sUnitType = pOverride.UnitType
18
		break
19
	end
20
21
	-- If we didn't get anything, yield to be returned the default UnitType for the UnitClass.
22
	if (sUnitType == nil) then
23
		sUnitType = GameInfo.UnitClasses[sUnitClass].DefaultUnit
24
	end
25
26
	-- Give whatever function called this the UnitType we yielded.
27
	return sUnitType
28
end
29
30
--[[-----------------------------------------
31
Name:  		ReturnBestInfantryUnit
32
Purpose:	Return the best land melee unit
33
that a city can build.  
34
-------------------------------------------]]
35
function fnReturnBestInfantryUnit( pCity )
36
37
	--BEGIN DEFINES
38
	local pPly = pCity:GetOwner()
39
	
40
	local possibleUnitClasses = { 
41
	GameInfoTypes.UNITCLASS_MECH,
42
	GameInfoTypes.UNITCLASS_MECHANIZED_INFANTRY, 
43
	GameInfoTypes.UNITCLASS_INFANTRY, 
44
	GameInfotypes.UNITCLASS_GREAT_WAR_INFANTRY, 
45
	GameInfoTypes.UNITCLASS_RIFLEMAN, 
46
	GameInfoTypes.UNITCLASS_MUSKETMAN, 
47
	GameInfoTypes.UNITCLASS_LONGSWORDSMAN, 
48
	GameInfoTypes.UNITCLASS_PIKEMAN, 
49
	GameInfoTypes.UNITCLASS_SWORDSMAN, 
50
	GameInfoTypes.UNITCLASS_SPEARMAN, 
51
	GameInfoTypes.UNITCLASS_WARRIOR
52
	} -- Thanks whoward69
53
	--END DEFINES
54
	
55
	-- Loop through each UnitClassType in the above defined table, see if the city can 
56
	-- train it's owner's specific UnitType.  Yield to be returned the best land melee 
57
	-- UnitType the city can build.
58
	for _, iUnitClass in ipairs(possibleUnitClasses) do -- Thanks whoward69
59
		if pCity:CanTrain( fn_GetCivSpecificUnit( pPly, iUnitClass ) ) then
60
			return fn_GetCivSpecificUnit( pPly, iUnitClass )
61
		end
62
	end
63
64
	-- Uh-oh!
65
	return -1
66
end
67
68
GameEvents.SetPopulation.Add( function( xOffset, yOffset, fOldPop, fNewPop )
69
70
	-- BEGIN DEFINES
71
	local pPlot			= Map.GetPlot( xOffset, yOffset )
72
	local pCity  			= pPlot:GetPlotCity()
73
	local pPly 			= pCity:GetOwner()
74
	local iUnitMostCurrent		= nil
75
	local nTrait			= GameInfo.Traits[pPly].UnitPerCapitalGrowths
76
	local sUnitAIType		= GameInfo.UnitAITypes.UNITAI_DEFENSE.ID
77
	local nZenith			= math.floor( pCity:GetHighestPopulation() )
78
	-- END DEFINES
79
80-
	-- On every growth of every city, run through the following list of conditions:
80+
	--[ On every growth of every city, run through the following list of conditions:
81-
	-- 1:  Does the city's owner have the trait, and is its population evenly divisible 
81+
	1:  Does the city's owner have the trait, and is its population evenly divisible 
82
	by the trait?
83-
	-- 2:  Is the city a capital?
83+
	2:  Is the city a capital?
84-
	-- 3:  Has the city grown instead of shrinking, and is this the city's highest 
84+
	3:  Has the city grown instead of shrinking, and is this the city's highest 
85
	population?
86-
	-- If all of the above are true, get the best land infantry unit we can, and 
86+
87-
	spawn it at the city.
87+
	If all of the above are true, get the best land infantry unit we can, and 
88
	spawn it at the city. --]
89
90
	if ( nTrait > 0 &&
91
	( math.floor( fNewPop ) % nTrait ) == 0 ) && then 
92
		if pCity:IsCapital() then
93
			if ( fNewPop > fOldPop ) &&
94
			fNewPop >= nZenith then
95
				iFreeUnit = fnReturnBestInfantryUnit( pCity )
96
97
				pPly:AddFreeUnit( iFreeUnit, iUnitAIType ) -- What are the 
98
				implications of this line?
99
			end
100
		end
101
	end
102
end )