include("PlotIterators.lua")
local improvementCampID = GameInfoTypes.IMPROVEMENT_CAMP
local improvementPastureID = GameInfoTypes.IMPROVEMENT_PASTURE
local resourceBisonID = GameInfoTypes.RESOURCE_BISON
local resourceCowID = GameInfoTypes.RESOURCE_COW
local resourceHorseID = GameInfoTypes.RESOURCE_HORSE
local resourceSheepID = GameInfoTypes.RESOURCE_SHEEP
local buildingRanchID = GameInfoTypes.BUILDING_AMERICA_RANCH
local fGameSpeedModifier1 = GameInfo.GameSpeeds[ Game.GetGameSpeedType() ].ConstructPercent / 100
function RanchClaimLand(playerID, cityID, buildingID)
local player = Players[playerID]
if (player:GetCivilizationType() == GameInfoTypes.CIVILIZATION_AMERICA) then
if buildingID == buildingRanchID then
local iEraModifier = math.max(pPlayer:GetCurrentEra(), 1)
local iYield1 = math.floor(20 * iEraModifier * fGameSpeedModifier1)
local city = player:GetCityByID(cityID)
local plot = Map.GetPlot(city:GetX(), city:GetY())
for loopPlot in PlotAreaSpiralIterator(plot, 3, SECTOR_NORTH, DIRECTION_CLOCKWISE, DIRECTION_OUTWARDS, CENTRE_INCLUDE) do
local plotX = loopPlot:GetX()
local plotY = loopPlot:GetY()
local plotResource = loopPlot:GetResourceType()
if loopPlot:GetOwner() == -1 then
if (plotResource == resourceSheepID or plotResource == resourceHorseID or plotResource == resourceCowID) then
loopPlot:SetOwner(playerID, cityID, true, true)
loopPlot:SetRevealed(playerTeam, true)
pCity:ChangeProduction(iYield1)
if loopPlot:GetImprovementType() == -1 then
loopPlot:SetImprovementType(improvementPastureID, true)
end
if pPlayer:IsHuman() and pPlayer:IsTurnActive() then
local iCityX = pCity:GetX()
local iCityY = pCity:GetY()
local vCityPosition = PositionCalculator(iCityX, iCityY)
Events.AddPopupTextEvent(vCityPosition, "[COLOR_YIELD_PRODUCTION]+"..iYield1.." [ICON_PRODUCTION][ENDCOLOR]", 1)
end
elseif (plotResource == resourceBisonID) then
loopPlot:SetOwner(playerID, cityID, true, true)
loopPlot:SetRevealed(playerTeam, true)
pCity:ChangeProduction(iYield1)
if loopPlot:GetImprovementType() == -1 then
loopPlot:SetImprovementType(improvementCampID, true)
end
if pPlayer:IsHuman() and pPlayer:IsTurnActive() then
local iCityX = pCity:GetX()
local iCityY = pCity:GetY()
local vCityPosition = PositionCalculator(iCityX, iCityY)
Events.AddPopupTextEvent(vCityPosition, "[COLOR_YIELD_PRODUCTION]+"..iYield1.." [ICON_PRODUCTION][ENDCOLOR]", 1)
end
end
if pPlayer:IsHuman() and pPlayer:IsTurnActive() then
pPlayer:AddNotification(NotificationTypes.NOTIFICATION_INSTANT_YIELD,
'Homestead constructed in [COLOR_POSITIVE_TEXT]'..city:GetName()..': [ENDCOLOR]+'..iYield1..' [ICON_PRODUCTION] Production',
'Bonus Yields in '..city:GetName(),
city:GetX(), city:GetY(), city:GetID())
end
end
end
end
end
end
GameEvents.CityConstructed.Add(RanchClaimLand)