diff --git a/src/economy.test.c b/src/economy.test.c index ba4a9da30..afbd1b25d 100644 --- a/src/economy.test.c +++ b/src/economy.test.c @@ -549,7 +549,7 @@ static void test_recruit(CuTest *tc) { CuAssertIntEquals(tc, 1, u->number); CuAssertIntEquals(tc, 1, f->num_people); CuAssertIntEquals(tc, 1, f->num_units); - add_recruits(u, 1, 1); + add_recruits(u, 1, 1, 1); CuAssertIntEquals(tc, 2, u->number); CuAssertIntEquals(tc, 2, f->num_people); CuAssertIntEquals(tc, 1, f->num_units); @@ -557,9 +557,13 @@ static void test_recruit(CuTest *tc) { CuAssertPtrEquals(tc, NULL, u->nextF); CuAssertPtrEquals(tc, NULL, u->prevF); CuAssertPtrEquals(tc, NULL, test_find_messagetype(f->msgs, "recruit")); - add_recruits(u, 1, 2); + add_recruits(u, 1, 2, 2); CuAssertIntEquals(tc, 3, u->number); CuAssertPtrNotNull(tc, test_find_messagetype(f->msgs, "recruit")); + test_clear_messages(f); + add_recruits(u, 1, 1, 2); + CuAssertIntEquals(tc, 4, u->number); + CuAssertPtrNotNull(tc, test_find_messagetype(f->msgs, "recruit")); test_teardown(); } diff --git a/src/recruit.c b/src/recruit.c index 2ad875114..10bff13b2 100644 --- a/src/recruit.c +++ b/src/recruit.c @@ -151,7 +151,7 @@ static recruitment *select_recruitment(recruit_request ** rop, return recruits; } -void add_recruits(unit * u, int number, int wanted) +void add_recruits(unit * u, int number, int wanted, int ordered) { region *r = u->region; assert(number <= wanted); @@ -178,9 +178,9 @@ void add_recruits(unit * u, int number, int wanted) remove_unit(&r->units, unew); } } - if (number < wanted) { + if (number < ordered) { ADDMSG(&u->faction->msgs, msg_message("recruit", - "unit region amount want", u, r, number, wanted)); + "unit region amount want", u, r, number, u->wants)); } } @@ -265,7 +265,7 @@ static int do_recruiting(recruitment * recruits, int available) /* unit is empty, dead, and cannot recruit */ number = 0; } - add_recruits(u, number, req->qty); + add_recruits(u, number, req->qty, u->wants); if (number > 0) { int dec = (int)(number * multi); if ((rc->ec_flags & ECF_REC_ETHEREAL) == 0) { @@ -406,6 +406,7 @@ static void recruit_cmd(unit * u, struct order *ord, recruit_request ** recruito } } + u->wants = n; if (recruitcost < 0) { rc = u_race(u); recruitcost = recruit_cost(f, rc); @@ -452,7 +453,6 @@ static void recruit_cmd(unit * u, struct order *ord, recruit_request ** recruito } u_setrace(u, rc); - u->wants = n; o = (recruit_request *)calloc(1, sizeof(recruit_request)); if (!o) abort(); o->qty = n; diff --git a/src/recruit.h b/src/recruit.h index f5a9c9695..be01ca957 100644 --- a/src/recruit.h +++ b/src/recruit.h @@ -13,7 +13,7 @@ extern "C" { struct unit; struct message *can_recruit(struct unit *u, const struct race *rc, struct order *ord, int now); - void add_recruits(struct unit * u, int number, int wanted); + void add_recruits(struct unit* u, int number, int wanted, int ordered); void recruit(struct region * r); #ifdef __cplusplus