Enforcing maximum size of units in give_men.

This commit is contained in:
Enno Rehling 2006-10-29 12:45:42 +00:00
parent 8fb509140c
commit 842f9038b8
5 changed files with 16 additions and 29 deletions

View File

@ -68,7 +68,6 @@
#include <string.h>
#include <assert.h>
#define UNDEAD_REPRODUCTION 0 /* vermehrung */
#define MOVECHANCE 25 /* chance fuer bewegung */
#define MAXILLUSION_TEXTS 3

View File

@ -169,7 +169,6 @@ give_men(int n, unit * u, unit * u2, struct order * ord)
} else if (u2 && (fval(u2, UFL_LOCKED)|| is_cursed(u2->attribs, C_SLAVE, 0))) {
error = 75;
} else if (u2 && u2->faction != u->faction && !alliedunit(u2, u->faction, HELP_GIVE) && !ucontact(u2, u)) {
error = 73;
} else if (u2 && (has_skill(u, SK_MAGIC) || has_skill(u2, SK_MAGIC))) {
error = 158;
@ -184,6 +183,10 @@ give_men(int n, unit * u, unit * u2, struct order * ord)
error = 139;
} else {
if (n > u->number) n = u->number;
if (u2 && n+u2->number > UNIT_MAXSIZE) {
n = UNIT_MAXSIZE-u2->number;
ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "error_unit_size", "maxsize", UNIT_MAXSIZE));
}
if (n == 0) {
error = 96;
} else if (u2 && u->faction != u2->faction) {

View File

@ -947,10 +947,10 @@ void
set_number(unit * u, int count)
{
assert (count >= 0);
assert (count <= USHRT_MAX);
assert (count <= UNIT_MAXSIZE);
#ifndef NDEBUG
assert (u->faction != 0 || u->number > 0);
assert (u->faction != NULL || u->number > 0);
#endif
if (playerrace(u->race)) {

View File

@ -39,31 +39,6 @@ age_undead(unit *u)
region *r = u->region;
int n = 0;
#if UNDEAD_REPRODUCTION > 0
if(fval(r->terrain, LAND_REGION)) {
int m;
#ifndef SLOW_UNDEADS
if (u->number>100) {
int k = u->number;
for (m=0;m!=100;++m) {
int d = k/(100-m);
k-=d;
if (rng_int() % 100 < UNDEAD_REPRODUCTION)
n+=d;
}
assert(k==0);
} else
#endif
for (m = u->number; m; m--)
if (rng_int() % 100 < UNDEAD_REPRODUCTION)
n++;
set_number(u, u->number + n);
u->hp += n * unit_max_hp(u);
n = rpeasants(r) - n;
n = max(0, n);
rsetpeasants(r, n);
}
#endif
/* untote, die einer partei angehoeren, koennen sich
* absplitten, anstatt sich zu vermehren. monster
* untote vermehren sich nur noch */

View File

@ -5519,6 +5519,16 @@
<text locale="fr">"$unit($unit) in $region($region): '$order($command)' - The unit does not have these herbs."</text>
<text locale="en">"$unit($unit) in $region($region): '$order($command)' - The unit does not have these herbs."</text>
</message>
<message name="unit_size" section="errors">
<type>
<arg name="unit" type="unit"/>
<arg name="region" type="region"/>
<arg name="command" type="order"/>
</type>
<text locale="de">"$unit($unit) in $region($region): '$order($command)' - Einheiten dürfen nicht mehr als $int($maxsize) Personen enthalten."</text>
<text locale="fr">"$unit($unit) in $region($region): '$order($command)' - Units may not have more than $int($maxsize) members."</text>
<text locale="en">"$unit($unit) in $region($region): '$order($command)' - Units may not have more than $int($maxsize) members."</text>
</message>
<message name="enter_overload" section="errors">
<type>
<arg name="unit" type="unit"/>