diff --git a/src/common/gamecode/economy.c b/src/common/gamecode/economy.c index bebaebdbe..ab965f91c 100644 --- a/src/common/gamecode/economy.c +++ b/src/common/gamecode/economy.c @@ -290,7 +290,7 @@ any_recruiters(const struct race * rc, int qty) static int peasant_recruiters(const struct race * rc, int qty) { - if (rc->ec_flags & ECF_REC_UNLIMITED) return -1; + if (rc->ec_flags & ECF_REC_ETHEREAL) return -1; if (rc->ec_flags & ECF_REC_HORSES) return -1; if (rc==new_race[RC_URUK]) return qty; return qty * 2; @@ -299,7 +299,7 @@ peasant_recruiters(const struct race * rc, int qty) static int horse_recruiters(const struct race * rc, int qty) { - if (rc->ec_flags & ECF_REC_UNLIMITED) return -1; + if (rc->ec_flags & ECF_REC_ETHEREAL) return -1; if (rc->ec_flags & ECF_REC_HORSES) return qty * 2; return -1; } @@ -424,7 +424,11 @@ expandrecruit(region * r, request * recruitorders) /* no limit: */ recruits = select_recruitment(&recruitorders, any_recruiters, &orc_total); if (recruits) { - do_recruiting(recruits, INT_MAX); + int recruited, peasants = rpeasants(r); + recruited = do_recruiting(recruits, INT_MAX); + if (recruited>0) { + rsetpeasants(r, peasants - recruited/2); + } free_recruitments(recruits); } diff --git a/src/common/kernel/faction.c b/src/common/kernel/faction.c index 69b44b4cd..a4c3440ce 100644 --- a/src/common/kernel/faction.c +++ b/src/common/kernel/faction.c @@ -228,13 +228,14 @@ destroyfaction(faction * f) distribute_items(u); if (!fval(r->terrain, SEA_REGION) && !!playerrace(u->race)) { const race * rc = u->race; - int p = rpeasants(u->region); int m = rmoney(u->region); - int h = rhorses(u->region); - /* Personen gehen nur an die Bauern, wenn sie auch von dort - * stammen */ - if ((rc->ec_flags & ECF_REC_UNLIMITED)==0) { + if ((rc->ec_flags & ECF_REC_ETHEREAL)==0) { + int p = rpeasants(u->region); + int h = rhorses(u->region); + + /* Personen gehen nur an die Bauern, wenn sie auch von dort + * stammen */ if (rc->ec_flags & ECF_REC_HORSES) { /* Zentauren an die Pferde */ h += u->number; } else if (rc == new_race[RC_URUK]){ /* Orks zählen nur zur Hälfte */ @@ -242,11 +243,11 @@ destroyfaction(faction * f) } else { p += u->number; } + h += get_item(u, I_HORSE); + rsetpeasants(r, p); + rsethorses(r, h); } m += get_money(u); - h += get_item(u, I_HORSE); - rsetpeasants(r, p); - rsethorses(r, h); rsetmoney(r, m); } diff --git a/src/common/kernel/unit.c b/src/common/kernel/unit.c index fce2a808e..4466f373d 100644 --- a/src/common/kernel/unit.c +++ b/src/common/kernel/unit.c @@ -870,11 +870,19 @@ transfermen(unit * u, unit * u2, int n) } } else if (r->land) { - if ((u->race->ec_flags & ECF_REC_UNLIMITED)==0) { - if(u->race != new_race[RC_URUK]) { - rsetpeasants(r, rpeasants(r) + n); + if ((u->race->ec_flags & ECF_REC_ETHEREAL)==0) { + const race * rc = u->race; + if (rc->ec_flags & ECF_REC_HORSES) { /* Zentauren an die Pferde */ + int h = rhorses(r) + u->number; + rsethorses(r, h); } else { - rsetpeasants(r, rpeasants(r) + n/2); + int p = rpeasants(r); + if (rc == new_race[RC_URUK]){ /* Orks zählen nur zur Hälfte */ + p += u->number/2; + } else { + p += u->number; + } + rsetpeasants(r, p); } } }