whoward69
DLL Minion
Tested and working, and yes you could split the code as you describe
Code:
--------------------------------------------------------------------
local g_iMitanniPlayer = -1
local g_iMitanniTeam = -1
local g_bMitanniAtWar = false
local g_iPalaceClass = GameInfoTypes.BUILDINGCLASS_PALACE
--------------------------------------------------------------------
function OnCityCreated(_, iPlayer)
print(string.format("OnCityCreated(_, %i)", iPlayer))
if (iPlayer == g_iMitanniPlayer) then
UpdateMitanniBonusYields()
end
end
function OnCityDestroyed(_, iPlayer, _, iNewPlayer)
print(string.format("OnCityDestroyed(_, %i, _, %i)", iPlayer, iNewPlayer))
if (iPlayer == g_iMitanniPlayer or iNewPlayer == g_iMitanniPlayer) then
UpdateMitanniBonusYields()
end
end
--------------------------------------------------------------------
-- There is a HUGE problem with this event, it doesn't trigger when a civ is conquered
function OnWarStateChanged(iMyTeam, iTheirTeam, bWar)
print(string.format("OnWarStateChanged(%i, %i, %s)", iMyTeam, iTheirTeam, (bWar and "true" or "false")))
if (iMyTeam == g_iMitanniTeam and bWar ~= g_bMitanniAtWar) then
UpdateMitanniBonusYields()
end
end
--------------------------------------------------------------------
function AtWarWithAnyMajor(iTeam)
local pTeam = Teams[iTeam]
for iOtherPlayer = 0, GameDefines.MAX_MAJOR_CIVS - 1, 1 do
local pOtherPlayer = Players[iOtherPlayer]
if (pOtherPlayer:IsAlive() and pTeam:IsAtWar(pOtherPlayer:GetTeam())) then
print(string.format("Team %i is at war with (at least) player %i", iTeam, iOtherPlayer))
return true
end
end
print(string.format("Team %i is at war with nobody", iTeam))
return false
end
--------------------------------------------------------------------
function UpdateMitanniBonusYields()
local pPlayer = Players[g_iMitanniPlayer]
local pCapital = pPlayer:GetCapitalCity()
local iBoost = pPlayer:GetNumCities()
g_bMitanniAtWar = AtWarWithAnyMajor(g_iMitanniTeam)
pPlayer:ChangeJONSCulturePerTurnForFree(-1 * pCapital:GetBuildingYieldChange(g_iPalaceClass, YieldTypes.YIELD_CULTURE))
if (g_bMitanniAtWar) then
print("Update bonus yields when at war")
pCapital:SetBuildingYieldChange(g_iPalaceClass, YieldTypes.YIELD_PRODUCTION, 0)
pCapital:SetBuildingYieldChange(g_iPalaceClass, YieldTypes.YIELD_CULTURE, 2 * iBoost)
else
print("Update bonus yields when at peace")
pCapital:SetBuildingYieldChange(g_iPalaceClass, YieldTypes.YIELD_PRODUCTION, iBoost)
pCapital:SetBuildingYieldChange(g_iPalaceClass, YieldTypes.YIELD_CULTURE, 0)
end
pPlayer:ChangeJONSCulturePerTurnForFree(pCapital:GetBuildingYieldChange(g_iPalaceClass, YieldTypes.YIELD_CULTURE))
end
--------------------------------------------------------------------
function Init()
for iPlayer = 0, GameDefines.MAX_MAJOR_CIVS - 1, 1 do
local pPlayer = Players[iPlayer]
if (pPlayer:IsEverAlive()) then
if (pPlayer:GetCivilizationType() == GameInfoTypes.CIVILIZATION_MITANNI) then
g_iMitanniPlayer = iPlayer
g_iMitanniTeam = pPlayer:GetTeam()
break
end
end
end
if (g_iMitanniPlayer ~= -1) then
g_bMitanniAtWar = AtWarWithAnyMajor(g_iMitanniTeam)
Events.SerialEventCityCreated.Add(OnCityCreated)
Events.SerialEventCityDestroyed.Add(OnCityDestroyed)
Events.SerialEventCityCaptured.Add(OnCityDestroyed)
Events.WarStateChanged.Add(OnWarStateChanged)
print("MitanniUA loaded")
end
end
--------------------------------------------------------------------
Init()