-- Communicates current population to mountainhomes to avoid cap overshooting. --[[=begin fix/population-cap ================== Run this after every migrant wave to ensure your population cap is not exceeded. The reason for population cap problems is that the population value it is compared against comes from the last dwarven caravan that successfully left for mountainhomes. This script instantly updates it. Note that a migration wave can still overshoot the limit by 1-2 dwarves because of the last migrant bringing his family. Likewise, king arrival ignores cap. =end]] local args = {...} local ui = df.global.ui local ui_stats = ui.tasks local civ = df.historical_entity.find(ui.civ_id) if not civ then qerror('No active fortress.') end local civ_stats = civ.activity_stats if not civ_stats then if args[1] ~= 'force' then qerror('No caravan report object; use "fix/population-cap force" to create one') end print('Creating an empty statistics structure...') civ.activity_stats = { new = true, created_weapons = { resize = #ui_stats.created_weapons }, discovered_creature_foods = { resize = #ui_stats.discovered_creature_foods }, discovered_creatures = { resize = #ui_stats.discovered_creatures }, discovered_plant_foods = { resize = #ui_stats.discovered_plant_foods }, discovered_plants = { resize = #ui_stats.discovered_plants }, } civ_stats = civ.activity_stats end -- Use max to keep at least some of the original caravan communication idea civ_stats.population = math.max(civ_stats.population, ui_stats.population) print('Home civ notified about current population.')