forked from github/server
STIRB + PARTEI transferiert auch Magier des gleichen Gebietes.
This commit is contained in:
parent
afa160c4c3
commit
f1a0a7a55c
14
src/laws.c
14
src/laws.c
|
@ -938,7 +938,15 @@ void transfer_faction(faction *fsrc, faction *fdst) {
|
|||
hnow += u->number;
|
||||
}
|
||||
}
|
||||
if (give_unit_allowed(u) == 0 && !get_mage(u)) {
|
||||
if (give_unit_allowed(u) == 0) {
|
||||
if (fdst->magiegebiet != M_NONE) {
|
||||
struct sc_mage *m = get_mage(u);
|
||||
if (m && mage_get_type(m) != fdst->magiegebiet) {
|
||||
u = unext;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (u->skills) {
|
||||
int i;
|
||||
for (i = 0; i != u->skill_size; ++i) {
|
||||
|
@ -950,7 +958,7 @@ void transfer_faction(faction *fsrc, faction *fdst) {
|
|||
}
|
||||
}
|
||||
if (i != u->skill_size) {
|
||||
u = u->nextF;
|
||||
u = unext;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
@ -3885,7 +3893,6 @@ void init_processor(void)
|
|||
p += 10; /* all claims must be done before we can USE */
|
||||
add_proc_region(p, enter_1, "Betreten (1. Versuch)"); /* for GIVE CONTROL */
|
||||
add_proc_order(p, K_USE, use_cmd, 0, "Benutzen");
|
||||
add_proc_order(p, K_QUIT, quit_cmd, 0, "Stirb");
|
||||
|
||||
p += 10; /* in case it has any effects on alliance victories */
|
||||
add_proc_order(p, K_GIVE, give_control_cmd, 0, "GIB KOMMANDO");
|
||||
|
@ -3916,6 +3923,7 @@ void init_processor(void)
|
|||
add_proc_region(p, economics, "Geben, Vergessen");
|
||||
add_proc_region(p+1, recruit, "Rekrutieren");
|
||||
add_proc_region(p+2, destroy, "Zerstoeren");
|
||||
add_proc_order(p, K_QUIT, quit_cmd, 0, "Stirb");
|
||||
|
||||
/* all recruitment must be finished before we can calculate
|
||||
* promotion cost of ability */
|
||||
|
|
|
@ -2107,7 +2107,7 @@ static void test_quit_transfer_limited(CuTest *tc) {
|
|||
}
|
||||
|
||||
/**
|
||||
* Mages cannot be transfered. At all.
|
||||
* Mages can be transfered within same school.
|
||||
*/
|
||||
static void test_quit_transfer_mages(CuTest *tc) {
|
||||
faction *f1, *f2;
|
||||
|
@ -2134,8 +2134,45 @@ static void test_quit_transfer_mages(CuTest *tc) {
|
|||
set_level(u2, SK_MAGIC, 1);
|
||||
create_mage(u2, M_GWYRRD);
|
||||
|
||||
quit_cmd(u1, u1->thisorder);
|
||||
CuAssertPtrEquals(tc, f2, u1->faction);
|
||||
CuAssertPtrEquals(tc, f2, u2->faction);
|
||||
CuAssertIntEquals(tc, FFL_QUIT, f1->flags & FFL_QUIT);
|
||||
|
||||
test_teardown();
|
||||
}
|
||||
|
||||
/**
|
||||
* Mages cannot be transfered from another school.
|
||||
*/
|
||||
static void test_quit_transfer_different_mages(CuTest *tc) {
|
||||
faction *f1, *f2;
|
||||
unit *u1, *u2;
|
||||
region *r;
|
||||
|
||||
test_setup();
|
||||
config_set_int("rules.maxskills.magic", 2);
|
||||
r = test_create_plain(0, 0);
|
||||
f1 = test_create_faction(NULL);
|
||||
faction_setpassword(f1, "password");
|
||||
u1 = test_create_unit(f1, r);
|
||||
f2 = test_create_faction(NULL);
|
||||
u2 = test_create_unit(f2, r);
|
||||
contact_unit(u2, u1);
|
||||
u1->thisorder = create_order(K_QUIT, f1->locale, "password %s %s",
|
||||
LOC(f1->locale, parameters[P_FACTION]), itoa36(f2->no));
|
||||
|
||||
f1->magiegebiet = M_DRAIG;
|
||||
set_level(u1, SK_MAGIC, 1);
|
||||
create_mage(u1, M_DRAIG);
|
||||
|
||||
f2->magiegebiet = M_GWYRRD;
|
||||
set_level(u2, SK_MAGIC, 1);
|
||||
create_mage(u2, M_GWYRRD);
|
||||
|
||||
quit_cmd(u1, u1->thisorder);
|
||||
CuAssertPtrEquals(tc, f1, u1->faction);
|
||||
CuAssertPtrEquals(tc, f2, u2->faction);
|
||||
CuAssertIntEquals(tc, FFL_QUIT, f1->flags & FFL_QUIT);
|
||||
|
||||
test_teardown();
|
||||
|
@ -2307,6 +2344,7 @@ CuSuite *get_laws_suite(void)
|
|||
SUITE_ADD_TEST(suite, test_quit_transfer_limited);
|
||||
SUITE_ADD_TEST(suite, test_quit_transfer_migrants);
|
||||
SUITE_ADD_TEST(suite, test_quit_transfer_mages);
|
||||
SUITE_ADD_TEST(suite, test_quit_transfer_different_mages);
|
||||
SUITE_ADD_TEST(suite, test_quit_transfer_hero);
|
||||
SUITE_ADD_TEST(suite, test_transfer_faction);
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue