[GS] Is there a desync free way to check is a city is building a wonder?

Bombermans

Chieftain
Joined
May 5, 2022
Messages
1
Question: Is there a desync free way to check city by city if that city is building a wonder?

Is there a way to check if a wonder is being built? For example I have this sample code from Sukritact's Egypt Rework but that mod gives desyncs online. :/ Is there a better way?

Code:
    function OnCityProductionChanged(iPlayer, iCity)
       local pPlayer = g_Players_SetMaat[iPlayer]
       if not pPlayer then return end

       local pCity = pPlayer:GetCities():FindID(iCity)
       if not pCity then return end

       local bIsWonder = 0
       while true do
           local sBuilding = pCity:GetBuildQueue():CurrentlyBuilding()
           if not sBuilding then break end
           local tBuilding = GameInfo.Buildings[sBuilding]
           if not tBuilding then break end

           if tBuilding.IsWonder then
               bIsWonder = 1
           end
           break
       end

       local pPlot = pCity:GetPlot()
       g_PlotPropertyHelper:SetProperty(pPlot, g_Property_SetMaat, bIsWonder)

       -- This is an easy way to force the City to refresh its modifiers!
       local sName = pCity:GetName()
       pCity:SetName(sName)
   end

   function OnPlayerTurnActivated(iPlayer)
       local pPlayer = g_Players_SetMaat[iPlayer]
       if not pPlayer then return end

       local pPlayerCities = pPlayer:GetCities()
       for _, pCity in pPlayerCities:Members() do
           local iCity = pCity:GetID()
           OnCityProductionChanged(iPlayer, iCity)
       end
   end

   Events.PlayerTurnActivated.Add(OnPlayerTurnActivated);
   Events.CityProductionChanged.Add(OnCityProductionChanged);
   Events.CityProductionCompleted.Add(OnCityProductionChanged);

local pPlayer = g_Players_SetMaat[iPlayer]
(This is just checking is player has the unique prod. district from Suk's mod. If player has that district, and the city is building a wonder, district gives double production).
 
Back
Top Bottom