Irkalla

Untitled

Dec 17th, 2012
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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
  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 )
Advertisement
Add Comment
Please, Sign In to add comment