diff --git a/conf/e2/config.json b/conf/e2/config.json
index 86d3949aa..6b11dceff 100644
--- a/conf/e2/config.json
+++ b/conf/e2/config.json
@@ -4,8 +4,9 @@
"prefixes.json",
"e2/terrains.json"
],
- "disable": [
- "pay"
+ "disabled": [
+ "pay",
+ "jsreport"
],
"settings": {
"game.id": 2,
diff --git a/conf/e2/config.xml b/conf/e2/config.xml
index 2c9ac7022..d1eac12d8 100644
--- a/conf/e2/config.xml
+++ b/conf/e2/config.xml
@@ -52,38 +52,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
eressea-server@eressea.de
diff --git a/conf/e3/config.json b/conf/e3/config.json
index 58804f1f0..236001e1d 100644
--- a/conf/e3/config.json
+++ b/conf/e3/config.json
@@ -4,7 +4,15 @@
"prefixes.json",
"e3/terrains.json"
],
- "disable": [
+ "disabled": [
+ "herbalism",
+ "alchemy",
+ "entertainment",
+ "espionage",
+ "perception",
+ "stealth",
+ "taxation",
+ "trade",
"besiege",
"steal",
"buy",
@@ -13,7 +21,8 @@
"spy",
"tax",
"entertain",
- "sell"
+ "sell",
+ "jsreport"
],
"settings": {
"game.id": 3,
diff --git a/conf/e3/config.xml b/conf/e3/config.xml
index 68e61b7d1..1a1f5f26f 100644
--- a/conf/e3/config.xml
+++ b/conf/e3/config.xml
@@ -41,40 +41,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/conf/e4/config.json b/conf/e4/config.json
index 5a58e7021..ffa11443c 100644
--- a/conf/e4/config.json
+++ b/conf/e4/config.json
@@ -4,7 +4,15 @@
"prefixes.json",
"e3/terrains.json"
],
- "disable": [
+ "disabled": [
+ "herbalism",
+ "alchemy",
+ "entertainment",
+ "espionage",
+ "perception",
+ "stealth",
+ "taxation",
+ "trade",
"besiege",
"steal",
"buy",
@@ -13,7 +21,8 @@
"spy",
"tax",
"entertain",
- "sell"
+ "sell",
+ "jsreport"
],
"settings": {
"game.id": 4,
diff --git a/conf/e4/config.xml b/conf/e4/config.xml
index 0d6ea5704..ffa1c5df8 100644
--- a/conf/e4/config.xml
+++ b/conf/e4/config.xml
@@ -42,39 +42,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/scripts/eressea/jsreport.lua b/scripts/eressea/jsreport.lua
index 0351efd12..b22f1acf2 100644
--- a/scripts/eressea/jsreport.lua
+++ b/scripts/eressea/jsreport.lua
@@ -1,7 +1,7 @@
local pkg = {}
function pkg.init()
- eressea.settings.set("feature.jsreport.enable", "1")
+ eressea.settings.set("jsreport.enabled", "1")
end
function pkg.update()
diff --git a/src/jsreport.c b/src/jsreport.c
index 64d6d4e2d..44b9ea252 100644
--- a/src/jsreport.c
+++ b/src/jsreport.c
@@ -25,7 +25,7 @@ static void coor_from_tiled(int *x, int *y) {
static int report_json(const char *filename, report_context * ctx, const char *charset)
{
- if (get_param_int(global.parameters, "feature.jsreport.enable", 0) != 0) {
+ if (get_param_int(global.parameters, "jsreport.enabled", 0) != 0) {
FILE * F = fopen(filename, "w");
if (F) {
int x, y, minx = INT_MAX, maxx = INT_MIN, miny = INT_MAX, maxy = INT_MIN;
diff --git a/src/kernel/jsonconf.c b/src/kernel/jsonconf.c
index be6a931d9..64ae06477 100644
--- a/src/kernel/jsonconf.c
+++ b/src/kernel/jsonconf.c
@@ -501,14 +501,42 @@ static void json_prefixes(cJSON *json) {
}
}
-static void json_disable_keywords(cJSON *json) {
+/** disable a feature.
+ * features are identified by eone of:
+ * 1. the keyword for their orders,
+ * 2. the name of the skill they use,
+ * 3. a "module.enabled" flag in the settings
+ */
+static void disable_feature(const char *str) {
+ char name[32];
+ int k;
+ skill_t sk;
+ sk = findskill(str);
+ if (sk != NOSKILL) {
+ enable_skill(sk, false);
+ return;
+ }
+ for (k = 0; k != MAXKEYWORDS; ++k) {
+ // FIXME: this loop is slow as balls.
+ if (strcmp(keywords[k], str) == 0) {
+ log_info("disable keyword %s\n", str);
+ enable_keyword(k, false);
+ return;
+ }
+ }
+ _snprintf(name, sizeof(name), "%s.enabled", str);
+ log_info("disable feature %s\n", name);
+ set_param(&global.parameters, name, "0");
+}
+
+static void json_disable_features(cJSON *json) {
cJSON *child;
if (json->type != cJSON_Array) {
- log_error("disable is not a json array: %d", json->type);
+ log_error("disabled is not a json array: %d", json->type);
return;
}
for (child = json->child; child; child = child->next) {
- disable_keyword_str(child->valuestring);
+ disable_feature(child->valuestring);
}
}
@@ -865,8 +893,8 @@ void json_config(cJSON *json) {
else if (strcmp(child->string, "prefixes") == 0) {
json_prefixes(child);
}
- else if (strcmp(child->string, "disable") == 0) {
- json_disable_keywords(child);
+ else if (strcmp(child->string, "disabled") == 0) {
+ json_disable_features(child);
}
else if (strcmp(child->string, "terrains") == 0) {
json_terrains(child);
diff --git a/src/kernel/jsonconf.test.c b/src/kernel/jsonconf.test.c
index 7b64f25a9..d7a4ad0cd 100644
--- a/src/kernel/jsonconf.test.c
+++ b/src/kernel/jsonconf.test.c
@@ -101,20 +101,26 @@ static void test_prefixes(CuTest * tc)
static void test_disable(CuTest * tc)
{
- const char * data = "{\"disable\": [ "
+ const char * data = "{\"disabled\": [ "
+ "\"alchemy\","
"\"pay\","
- "\"besiege\""
+ "\"besiege\","
+ "\"module\""
"]}";
cJSON *json = cJSON_Parse(data);
test_cleanup();
+ CuAssertTrue(tc, skill_enabled(SK_ALCHEMY));
CuAssertTrue(tc, !keyword_disabled(K_BANNER));
CuAssertTrue(tc, !keyword_disabled(K_PAY));
CuAssertTrue(tc, !keyword_disabled(K_BESIEGE));
+ CuAssertIntEquals(tc, 1, get_param_int(global.parameters, "module.enabled", 1));
json_config(json);
+ CuAssertTrue(tc, !skill_enabled(SK_ALCHEMY));
CuAssertTrue(tc, !keyword_disabled(K_BANNER));
CuAssertTrue(tc, keyword_disabled(K_PAY));
CuAssertTrue(tc, keyword_disabled(K_BESIEGE));
+ CuAssertIntEquals(tc, 0, get_param_int(global.parameters, "module.enabled", 1));
test_cleanup();
}
diff --git a/src/kernel/xmlreader.c b/src/kernel/xmlreader.c
index 1e87401a7..4f6dbf0c0 100644
--- a/src/kernel/xmlreader.c
+++ b/src/kernel/xmlreader.c
@@ -2052,44 +2052,8 @@ static int parse_strings(xmlDocPtr doc)
return 0;
}
-static int parse_main(xmlDocPtr doc)
-{
- xmlXPathContextPtr xpath = xmlXPathNewContext(doc);
- xmlXPathObjectPtr result =
- xmlXPathEvalExpression(BAD_CAST "/eressea/game", xpath);
- xmlNodeSetPtr nodes = result->nodesetval;
- int i;
-
- if (nodes->nodeNr > 0) {
- xmlNodePtr node = nodes->nodeTab[0];
-
- xmlXPathFreeObject(result);
-
- xpath->node = node;
- /* reading eressea/game/skill */
- result = xmlXPathEvalExpression(BAD_CAST "skill", xpath);
- nodes = result->nodesetval;
- for (i = 0; i != nodes->nodeNr; ++i) {
- xmlNodePtr node = nodes->nodeTab[i];
- xmlChar *propName = xmlGetProp(node, BAD_CAST "name");
- skill_t sk = findskill((const char *)propName);
- if (sk != NOSKILL) {
- bool enable = xml_bvalue(node, "enable", true);
- enable_skill(sk, enable);
- }
- xmlFree(propName);
- }
- }
- xmlXPathFreeObject(result);
-
- xmlXPathFreeContext(xpath);
- return 0;
-}
-
void register_xmlreader(void)
{
- xml_register_callback(parse_main);
-
xml_register_callback(parse_strings);
xml_register_callback(parse_messages);
xml_register_callback(parse_resources);
diff --git a/src/keyword.c b/src/keyword.c
index 7dd31b55a..0bd699836 100644
--- a/src/keyword.c
+++ b/src/keyword.c
@@ -74,20 +74,6 @@ keyword_t get_keyword(const char *s, const struct locale *lang) {
static bool disabled_kwd[MAXKEYWORDS];
-void disable_keyword_str(const char *str) {
- // FIXME: this is slower than balls.
- int k;
- for (k = 0; k != MAXKEYWORDS; ++k) {
- if (strcmp(keywords[k], str) == 0) {
- enable_keyword(k, false);
- break;
- }
- }
- if (k == MAXKEYWORDS) {
- log_error("trying to disable unknown command %s\n", str);
- }
-}
-
void enable_keyword(keyword_t kwd, bool enabled) {
assert(kwd < MAXKEYWORDS);
disabled_kwd[kwd] = !enabled;
diff --git a/src/keyword.h b/src/keyword.h
index 43918320d..9d5e20f64 100644
--- a/src/keyword.h
+++ b/src/keyword.h
@@ -81,7 +81,6 @@ extern "C"
void init_keyword(const struct locale *lang, keyword_t kwd, const char *str);
bool keyword_disabled(keyword_t kwd);
void enable_keyword(keyword_t kwd, bool enabled);
- void disable_keyword_str(const char *str);
const char *keyword(keyword_t kwd);
// #define keyword(kwd) mkname("keyword", keywords[kwd])
diff --git a/src/tests.c b/src/tests.c
index 3389aff01..596d7b02f 100644
--- a/src/tests.c
+++ b/src/tests.c
@@ -89,6 +89,9 @@ void test_cleanup(void)
free_seen();
free_prefixes();
mt_clear();
+ for (i = 0; i != MAXSKILLS; ++i) {
+ enable_skill(i, true);
+ }
for (i = 0; i != MAXKEYWORDS; ++i) {
enable_keyword(i, true);
}