From ac12cb966d02c595cd616387d932486caa7593bd Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Thu, 16 Mar 2017 16:07:52 +0100 Subject: [PATCH] implement fixed wage functions, select by constant value --- conf/e3/config.json | 1 + conf/e3/rules.xml | 3 --- src/kernel/building.c | 15 +++++++++++---- src/kernel/config.c | 1 - src/kernel/config.h | 2 -- src/kernel/xmlreader.c | 40 ---------------------------------------- src/laws.test.c | 8 +------- 7 files changed, 13 insertions(+), 57 deletions(-) diff --git a/conf/e3/config.json b/conf/e3/config.json index 1cecc89d2..a42961e03 100644 --- a/conf/e3/config.json +++ b/conf/e3/config.json @@ -56,6 +56,7 @@ "seed.population.max": 8, "rules.reserve.twophase": true, "rules.owners.force_leave": false, + "rules.wage.function": 2, "rules.monsters.attack_chance": 0.1, "rules.transfermen": false, "stealth.faction.other": false, diff --git a/conf/e3/rules.xml b/conf/e3/rules.xml index 421b54d7a..d59787551 100644 --- a/conf/e3/rules.xml +++ b/conf/e3/rules.xml @@ -28,7 +28,4 @@ - - - diff --git a/src/kernel/building.c b/src/kernel/building.c index 1a9e826e6..64b616fdc 100644 --- a/src/kernel/building.c +++ b/src/kernel/building.c @@ -811,10 +811,18 @@ minimum_wage(const region * r, const faction * f, const race * rc, int in_turn) * die Bauern wenn f == NULL. */ int wage(const region * r, const faction * f, const race * rc, int in_turn) { - if (global.wage) { - return global.wage(r, f, rc, in_turn); + static int config; + static int rule_wage; + if (config_changed(&config)) { + rule_wage = config_get_int("rules.wage.function", 1); } - return default_wage(r, f, rc, in_turn); + if (rule_wage==0) { + return 0; + } + if (rule_wage==1) { + return default_wage(r, f, rc, in_turn); + } + return minimum_wage(r, f, rc, in_turn); } int cmp_wage(const struct building *b, const building * a) @@ -913,7 +921,6 @@ int cmp_current_owner(const building * b, const building * a) void register_buildings(void) { - register_function((pf_generic)minimum_wage, "minimum_wage"); register_function((pf_generic)init_smithy, "init_smithy"); register_function((pf_generic)castle_name, "castle_name"); register_function((pf_generic)castle_name_2, "castle_name_2"); diff --git a/src/kernel/config.c b/src/kernel/config.c index 6d84a7c73..4b3ab5a91 100644 --- a/src/kernel/config.c +++ b/src/kernel/config.c @@ -796,7 +796,6 @@ bool config_token(const char *key, const char *tok) { } void free_config(void) { - global.wage = NULL; free_params(&configuration); ++config_cache_key; } diff --git a/src/kernel/config.h b/src/kernel/config.h index c8c2e4be9..a4378332d 100644 --- a/src/kernel/config.h +++ b/src/kernel/config.h @@ -110,8 +110,6 @@ extern "C" { typedef struct settings { struct attrib *attribs; void *vm_state; - int(*wage) (const struct region * r, const struct faction * f, - const struct race * rc, int in_turn); } settings; void set_param(struct param **p, const char *key, const char *value); diff --git a/src/kernel/xmlreader.c b/src/kernel/xmlreader.c index dcaf97580..7cb871785 100644 --- a/src/kernel/xmlreader.c +++ b/src/kernel/xmlreader.c @@ -883,44 +883,6 @@ static item_type *xml_readitem(xmlXPathContextPtr xpath, resource_type * rtype) return itype; } -static int parse_rules(xmlDocPtr doc) -{ - xmlXPathContextPtr xpath = xmlXPathNewContext(doc); - xmlXPathObjectPtr functions; - xmlNodeSetPtr nodes; - int i; - - /* reading eressea/resources/resource */ - functions = xmlXPathEvalExpression(BAD_CAST "/eressea/rules/function", xpath); - nodes = functions->nodesetval; - for (i = 0; i != nodes->nodeNr; ++i) { - xmlNodePtr node = nodes->nodeTab[i]; - xmlChar *propValue; - pf_generic fun; - - parse_function(node, &fun, &propValue); - - if (fun == NULL) { - log_error("unknown function for rule '%s' %s\n", (const char *)propValue); - xmlFree(propValue); - continue; - } - assert(propValue != NULL); - if (strcmp((const char *)propValue, "wage") == 0) { - global.wage = - (int(*)(const struct region *, const struct faction *, - const struct race *, int))fun; - } - else { - log_error("unknown function for rule '%s'\n", (const char *)propValue); - } - xmlFree(propValue); - } - xmlXPathFreeObject(functions); - xmlXPathFreeContext(xpath); - return 0; -} - static int parse_resources(xmlDocPtr doc) { xmlXPathContextPtr xpath = xmlXPathNewContext(doc); @@ -1960,8 +1922,6 @@ static int parse_strings(xmlDocPtr doc) void register_xmlreader(void) { - xml_register_callback(parse_rules); - xml_register_callback(parse_races); xml_register_callback(parse_calendar); xml_register_callback(parse_resources); diff --git a/src/laws.test.c b/src/laws.test.c index 9ed457af7..ce8ca2c19 100644 --- a/src/laws.test.c +++ b/src/laws.test.c @@ -1444,15 +1444,10 @@ static void test_show_race(CuTest *tc) { test_cleanup(); } -static int low_wage(const region * r, const faction * f, const race * rc, int in_turn) { - return 1; -} - static void test_immigration(CuTest * tc) { region *r; double inject[] = { 1 }; - int (*old_wage)(const region*, const faction*, const race*, int) = global.wage; test_setup(); r = test_create_region(0, 0, 0); @@ -1472,10 +1467,9 @@ static void test_immigration(CuTest * tc) random_source_inject_array(inject, 2); - global.wage = low_wage; + config_set("rules.wage.function", "0"); immigration(); CuAssertIntEquals(tc, 2, rpeasants(r)); - global.wage = old_wage; test_cleanup(); }