diff --git a/conf/e2/config.xml b/conf/e2/config.xml index 51aaa133d..170621b48 100644 --- a/conf/e2/config.xml +++ b/conf/e2/config.xml @@ -103,6 +103,7 @@ + diff --git a/src/laws.c b/src/laws.c index 8caf22bca..6085f5f33 100755 --- a/src/laws.c +++ b/src/laws.c @@ -674,6 +674,39 @@ growing_herbs(region * r, const int current_season, const int last_weeks_season) } } +void immigration(void) +{ + region *r; + log_info(" - Einwanderung..."); + int repopulate=get_param_int(global.parameters, "rules.economy.repopulate_maximum", 90); + for (r = regions; r; r = r->next) { + if (r->land && r->land->newpeasants) { + int rp = rpeasants(r) + r->land->newpeasants; + rsetpeasants(r, _max(0, rp)); + } + /* Genereate some (0-2 to 0-6 depending on the income) peasants out of nothing */ + /*if less then 50 are in the region and there is space and no monster or deamon units in the region */ + int peasants = rpeasants(r); + if (repopulate && r->land && (peasants < repopulate) && maxworkingpeasants(r) > (peasants+30)*2) + { + int badunit = 0; + unit *u; + for (u = r->units; u; u = u->next) { + if (!playerrace(u_race(u)) || u_race(u) == get_race(RC_DAEMON)) + { + badunit = 1; + break; + } + } + if (badunit == 0) + { + peasants += (int)(rng_double()*(wage(r, NULL, NULL, turn) - 9)); + rsetpeasants(r, peasants); + } + } + } +} + void demographics(void) { region *r; @@ -748,15 +781,7 @@ void demographics(void) }; remove_empty_units(); - - log_info(" - Einwanderung..."); - for (r = regions; r; r = r->next) { - if (r->land && r->land->newpeasants) { - int rp = rpeasants(r) + r->land->newpeasants; - rsetpeasants(r, _max(0, rp)); - } - } - + immigration(); checkorders(); } diff --git a/src/laws.h b/src/laws.h index 5a7cd8024..f5209ac3f 100755 --- a/src/laws.h +++ b/src/laws.h @@ -34,6 +34,7 @@ extern "C" { int writepasswd(void); void demographics(void); + void immigration(void); void update_guards(void); void update_subscriptions(void); void deliverMail(struct faction *f, struct region *r, struct unit *u,