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 | |
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 |
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: | |
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? | |
84 | 3: Has the city grown instead of shrinking, and is this the city's highest | |
85 | population? | |
86 | ||
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 ) |