diff --git a/src/kernel/faction.c b/src/kernel/faction.c index e2f364867..6a54f56aa 100755 --- a/src/kernel/faction.c +++ b/src/kernel/faction.c @@ -424,21 +424,21 @@ void destroyfaction(faction ** fp) } while (u) { + region *r = u->region; /* give away your stuff, to ghosts if you cannot (quest items) */ if (u->items) { - region *r = u->region; int result = gift_items(u, GIFT_FRIENDS | GIFT_PEASANTS); if (result != 0) { save_special_items(u); } - if (r->land && playerrace(u_race(u))) { - const race *rc = u_race(u); - /* Personen gehen nur an die Bauern, wenn sie auch von dort stammen */ - if ((rc->ec_flags & ECF_REC_ETHEREAL) == 0) { - int p = rpeasants(u->region); - p += (int)(u->number / rc->recruit_multi); - rsetpeasants(r, p); - } + } + if (r->land && playerrace(u_race(u))) { + const race *rc = u_race(u); + /* Personen gehen nur an die Bauern, wenn sie auch von dort stammen */ + if ((rc->ec_flags & ECF_REC_ETHEREAL) == 0) { + int p = rpeasants(u->region); + p += (int)(u->number / rc->recruit_multi); + rsetpeasants(r, p); } } set_number(u, 0); diff --git a/src/kernel/faction.test.c b/src/kernel/faction.test.c index 728ceac8a..066431e04 100644 --- a/src/kernel/faction.test.c +++ b/src/kernel/faction.test.c @@ -42,20 +42,38 @@ static void test_destroyfaction(CuTest *tc) { init_resources(); r = test_create_plain(0, 0); - rsethorses(r, 10); rsetpeasants(r, 100); + f = test_create_faction(); + u = test_create_unit(f, r); + scale_number(u, 100); + CuAssertPtrEquals(tc, f, factions); + CuAssertPtrEquals(tc, NULL, f->next); + destroyfaction(&factions); + CuAssertPtrEquals(tc, NULL, factions); + CuAssertIntEquals(tc, 200, rpeasants(r)); + test_teardown(); +} + +static void test_destroyfaction_items(CuTest *tc) { + faction *f; + region *r; + unit* u; + + test_setup(); + init_resources(); + + r = test_create_plain(0, 0); + rsethorses(r, 10); rsetmoney(r, 1000); f = test_create_faction(); u = test_create_unit(f, r); i_change(&u->items, it_find("horse"), 10); i_change(&u->items, it_find("money"), 1000); - scale_number(u, 100); CuAssertPtrEquals(tc, f, factions); CuAssertPtrEquals(tc, NULL, f->next); destroyfaction(&factions); CuAssertPtrEquals(tc, NULL, factions); CuAssertIntEquals(tc, 20, rhorses(r)); - CuAssertIntEquals(tc, 200, rpeasants(r)); CuAssertIntEquals(tc, 2000, rmoney(r)); test_teardown(); } @@ -563,6 +581,7 @@ CuSuite *get_faction_suite(void) SUITE_ADD_TEST(suite, test_addfaction); SUITE_ADD_TEST(suite, test_remove_empty_factions); SUITE_ADD_TEST(suite, test_destroyfaction); + SUITE_ADD_TEST(suite, test_destroyfaction_items); SUITE_ADD_TEST(suite, test_destroyfaction_undead); SUITE_ADD_TEST(suite, test_destroyfaction_demon); SUITE_ADD_TEST(suite, test_destroyfaction_orc);