forked from github/server
implement post-combat forced leave from ship/building
This commit is contained in:
parent
b630c9ee45
commit
e7bffb7533
|
@ -4307,6 +4307,9 @@ void do_battle(region * r)
|
||||||
|
|
||||||
/* Auswirkungen berechnen: */
|
/* Auswirkungen berechnen: */
|
||||||
aftermath(b);
|
aftermath(b);
|
||||||
|
if (rule_force_leave(FORCE_LEAVE_POSTCOMBAT)) {
|
||||||
|
force_leave(b->region);
|
||||||
|
}
|
||||||
/* Hier ist das Gefecht beendet, und wir können die
|
/* Hier ist das Gefecht beendet, und wir können die
|
||||||
* Hilfsstrukturen * wieder löschen: */
|
* Hilfsstrukturen * wieder löschen: */
|
||||||
|
|
||||||
|
|
|
@ -4337,6 +4337,11 @@ void force_leave(region *r) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool rule_force_leave(int flags) {
|
||||||
|
int rules = get_param_int(global.parameters, "rules.owners.force_leave", 0);
|
||||||
|
return (rules&flags) == flags;
|
||||||
|
}
|
||||||
|
|
||||||
static void maintain_buildings_1(region * r)
|
static void maintain_buildings_1(region * r)
|
||||||
{
|
{
|
||||||
maintain_buildings(r, false);
|
maintain_buildings(r, false);
|
||||||
|
@ -4438,7 +4443,7 @@ void init_processor(void)
|
||||||
add_proc_unit(p, follow_unit, "Folge auf Einheiten setzen");
|
add_proc_unit(p, follow_unit, "Folge auf Einheiten setzen");
|
||||||
|
|
||||||
p += 10; /* rest rng again before economics */
|
p += 10; /* rest rng again before economics */
|
||||||
if (get_param_int(global.parameters, "rules.owners.force_leave", 0)) {
|
if (rule_force_leave(FORCE_LEAVE_ALL)) {
|
||||||
add_proc_region(p, force_leave, "kick non-allies out of buildings/ships");
|
add_proc_region(p, force_leave, "kick non-allies out of buildings/ships");
|
||||||
}
|
}
|
||||||
add_proc_region(p, economics, "Zerstoeren, Geben, Rekrutieren, Vergessen");
|
add_proc_region(p, economics, "Zerstoeren, Geben, Rekrutieren, Vergessen");
|
||||||
|
|
|
@ -105,9 +105,13 @@ extern "C" {
|
||||||
bool seefaction(const struct faction *f, const struct region *r,
|
bool seefaction(const struct faction *f, const struct region *r,
|
||||||
const struct unit *u, int modifier);
|
const struct unit *u, int modifier);
|
||||||
int armedmen(const struct unit *u, bool siege_weapons);
|
int armedmen(const struct unit *u, bool siege_weapons);
|
||||||
void force_leave(struct region *r);
|
|
||||||
int peasant_luck_effect(int peasants, int luck, int maxp, double variance);
|
int peasant_luck_effect(int peasants, int luck, int maxp, double variance);
|
||||||
|
|
||||||
|
#define FORCE_LEAVE_POSTCOMBAT 1
|
||||||
|
#define FORCE_LEAVE_ALL 2
|
||||||
|
bool rule_force_leave(int flag);
|
||||||
|
void force_leave(struct region *r);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -230,6 +230,21 @@ static void test_display_cmd(CuTest *tc) {
|
||||||
test_cleanup();
|
test_cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_rule_force_leave(CuTest *tc) {
|
||||||
|
set_param(&global.parameters, "rules.owners.force_leave", "0");
|
||||||
|
CuAssertIntEquals(tc, false, rule_force_leave(FORCE_LEAVE_ALL));
|
||||||
|
CuAssertIntEquals(tc, false, rule_force_leave(FORCE_LEAVE_POSTCOMBAT));
|
||||||
|
set_param(&global.parameters, "rules.owners.force_leave", "1");
|
||||||
|
CuAssertIntEquals(tc, false, rule_force_leave(FORCE_LEAVE_ALL));
|
||||||
|
CuAssertIntEquals(tc, true, rule_force_leave(FORCE_LEAVE_POSTCOMBAT));
|
||||||
|
set_param(&global.parameters, "rules.owners.force_leave", "2");
|
||||||
|
CuAssertIntEquals(tc, true, rule_force_leave(FORCE_LEAVE_ALL));
|
||||||
|
CuAssertIntEquals(tc, false, rule_force_leave(FORCE_LEAVE_POSTCOMBAT));
|
||||||
|
set_param(&global.parameters, "rules.owners.force_leave", "3");
|
||||||
|
CuAssertIntEquals(tc, true, rule_force_leave(FORCE_LEAVE_ALL));
|
||||||
|
CuAssertIntEquals(tc, true, rule_force_leave(FORCE_LEAVE_POSTCOMBAT));
|
||||||
|
}
|
||||||
|
|
||||||
static void test_force_leave_buildings(CuTest *tc) {
|
static void test_force_leave_buildings(CuTest *tc) {
|
||||||
ally *al;
|
ally *al;
|
||||||
region *r;
|
region *r;
|
||||||
|
@ -779,6 +794,7 @@ CuSuite *get_laws_suite(void)
|
||||||
SUITE_ADD_TEST(suite, test_enter_building);
|
SUITE_ADD_TEST(suite, test_enter_building);
|
||||||
SUITE_ADD_TEST(suite, test_enter_ship);
|
SUITE_ADD_TEST(suite, test_enter_ship);
|
||||||
SUITE_ADD_TEST(suite, test_display_cmd);
|
SUITE_ADD_TEST(suite, test_display_cmd);
|
||||||
|
SUITE_ADD_TEST(suite, test_rule_force_leave);
|
||||||
SUITE_ADD_TEST(suite, test_force_leave_buildings);
|
SUITE_ADD_TEST(suite, test_force_leave_buildings);
|
||||||
SUITE_ADD_TEST(suite, test_force_leave_ships);
|
SUITE_ADD_TEST(suite, test_force_leave_ships);
|
||||||
SUITE_ADD_TEST(suite, test_force_leave_ships_on_ocean);
|
SUITE_ADD_TEST(suite, test_force_leave_ships_on_ocean);
|
||||||
|
|
Loading…
Reference in New Issue