From 84f8a9f74618c7d85f77842c02ffdb413a5792d2 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Mon, 8 Jun 2015 21:15:07 +0200 Subject: [PATCH] calculate simple default scores for items that do not have one defined in XML. --- src/kernel/xmlreader.c | 11 ++++++++--- src/modules/score.c | 17 +++++++++++++++++ src/modules/score.h | 7 +++++-- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/kernel/xmlreader.c b/src/kernel/xmlreader.c index 7179238ab..b4b1da708 100644 --- a/src/kernel/xmlreader.c +++ b/src/kernel/xmlreader.c @@ -31,6 +31,10 @@ without prior permission by the authors of Eressea. #include "vortex.h" +#if SCORE_MODULE +#include +#endif + /* util includes */ #include #include @@ -766,9 +770,6 @@ static item_type *xml_readitem(xmlXPathContextPtr xpath, resource_type * rtype) itype->weight = xml_ivalue(node, "weight", 0); itype->capacity = xml_ivalue(node, "capacity", 0); itype->flags |= flags; -#if SCORE_MODULE - itype->score = xml_ivalue(node, "score", 0); -#endif /* reading item/construction */ xpath->node = node; @@ -855,6 +856,10 @@ static item_type *xml_readitem(xmlXPathContextPtr xpath, resource_type * rtype) } xmlFree(propValue); } +#if SCORE_MODULE + itype->score = xml_ivalue(node, "score", 0); + if (!itype->score) itype->score = default_score(itype); +#endif xmlXPathFreeObject(result); return itype; diff --git a/src/modules/score.c b/src/modules/score.c index bf3e472e1..26788199c 100644 --- a/src/modules/score.c +++ b/src/modules/score.c @@ -24,6 +24,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. /* kernel includes */ #include #include +#include #include #include #include @@ -214,4 +215,20 @@ void score(void) } } +int default_score(const item_type *itype) { + int result = 0; + if (itype->construction) { + requirement *req = itype->construction->materials; + while (req->number) { + int score = req->rtype->itype ? req->rtype->itype->score : 10; + result += score * req->number * 2; + ++req; + } + } + else { + result = 10; + } + return result; +} + #endif diff --git a/src/modules/score.h b/src/modules/score.h index 0cbe6b749..7ffdf64e5 100644 --- a/src/modules/score.h +++ b/src/modules/score.h @@ -26,8 +26,11 @@ extern "C" { #error "must define SCORE_MODULE to use this module" #endif - extern void score(void); - extern int average_score_of_age(int age, int a); + struct item_type; + + void score(void); + int average_score_of_age(int age, int a); + int default_score(const struct item_type *itype); #ifdef __cplusplus }