local iRequiredCiv = GameInfoTypes.CIVILIZATION_AMERICA
local iPromoExtraStrength = GameInfoTypes.PROMOTION_INDOMITABLE_WILL
function GetPlayersAtWarWith(iOurTeamID)
local tPlayersAtWarWith = {}
for iTeam = 0, GameDefines.MAX_CIV_TEAMS - 1 do
if iTeam ~= iOurTeamID then
local pTheirTeam = Teams[iTeam]
if not pTheirTeam:IsBarbarian() and not pTheirTeam:IsMinorCiv() and pTheirTeam:IsAlive() then
if Teams[iOurTeamID]:IsAtWar(iTeam) then
for PlayerID = 0, GameDefines.MAX_MAJOR_CIVS - 1, 1 do
local pPlayer = Players[PlayerID]
if (pPlayer ~= nil) then
if (pPlayer:GetTeam() == iTeam) and pPlayer:IsAlive() then
tPlayersAtWarWith[PlayerID] = PlayerID
end
end
end
end
end
end
end
return tPlayersAtWarWith
end
function GetConqueredCities(tPlayersAtWarWith)
local ConqueredCities = "NONE"
for k,v in pairs(tPlayersAtWarWith) do
for pCity in Players[v]:Cities() do
if Players[pCity:GetOriginalOwner()]:IsMinorCiv() or not Players[pCity:GetOriginalOwner()]:IsMinorCiv() then
if ConqueredCities == "NONE" then
ConqueredCities = {}
end
table.insert(ConqueredCities, pCity)
end
end
end
return ConqueredCities
end
function ExtraStrengthCityLiberate(iPlayer)
local pPlayer = Players[iPlayer]
if pPlayer:GetCivilizationType() == iRequiredCiv then
local iOurTeamID = pPlayer:GetTeam()
local bIsAtWar = (Teams[iOurTeamID]:GetAtWarCount(true) > 0)
for pUnit in pPlayer:Units() do
if pUnit:IsCombatUnit() then
local bUnitShouldHavePromotion = false
if bIsAtWar then
local tPlayersAtWarWith = GetPlayersAtWarWith(iOurTeamID)
local tCitiesToBeLiberated = GetConqueredCities(tPlayersAtWarWith)
if tCitiesToBeLiberated ~= "NONE" then
local pUnitPlot = pUnit:GetPlot()
local iTileOwnerID = pUnitPlot:GetOwner()
if tPlayersAtWarWith[iTileOwnerID] then
for pCity in Players[iTileOwnerID]:Cities() do
local bCityIsInConqueredList = false
for k,v in pairs(tCitiesToBeLiberated) do
if pCity == v then
bCityIsInConqueredList = true
break
end
end
if bCityIsInConqueredList and (Map.PlotDistance(pUnitPlot:GetX(), pUnitPlot:GetY(), pCity:GetX(), pCity:GetY()) <= 3) then
bUnitShouldHavePromotion = true
end
end
end
end
end
pUnit:SetHasPromotion(iPromoExtraStrength, bUnitShouldHavePromotion)
end
end
end
end
GameEvents.PlayerDoTurn.Add(ExtraStrengthCityLiberate)