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 ) |