From 1113d3d7e9d7f0873f9ec35c85606e6b55aefdba Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sat, 29 Oct 2005 16:28:10 +0000 Subject: [PATCH] bugfix luxuries. now possible (though not done) to read them from xml. --- src/common/items/itemtypes.c | 14 ++++++++++---- src/common/items/itemtypes.h | 1 + src/common/items/seed.c | 4 ++-- src/common/items/seed.h | 4 ++-- src/common/items/weapons.c | 3 ++- src/common/items/xerewards.c | 4 ++-- src/common/kernel/item.c | 1 + src/common/kernel/xmlreader.c | 18 ++++++++++++++++++ src/eressea/server.cpp | 1 + src/res/resources.xml | 11 ++--------- 10 files changed, 41 insertions(+), 20 deletions(-) diff --git a/src/common/items/itemtypes.c b/src/common/items/itemtypes.c index 3106cf8cc..fb8816523 100644 --- a/src/common/items/itemtypes.c +++ b/src/common/items/itemtypes.c @@ -20,12 +20,18 @@ #include "seed.h" void -init_itemtypes(void) +register_itemtypes(void) { + /* registering misc. functions */ register_weapons(); register_xerewards(); register_artrewards(); - init_weapons(); - register_seed(); - register_mallornseed(); +} + +void +init_itemtypes(void) +{ + init_weapons(); + init_seed(); + init_mallornseed(); } diff --git a/src/common/items/itemtypes.h b/src/common/items/itemtypes.h index 4dd3a067b..f6ae39b73 100644 --- a/src/common/items/itemtypes.h +++ b/src/common/items/itemtypes.h @@ -17,6 +17,7 @@ extern "C" { #endif extern void init_itemtypes(void); +extern void register_itemtypes(void); #ifdef __cplusplus } diff --git a/src/common/items/seed.c b/src/common/items/seed.c index 9ccd04d33..f8630828d 100644 --- a/src/common/items/seed.c +++ b/src/common/items/seed.c @@ -46,7 +46,7 @@ limit_seeds(const region * r, const resource_type * rtype) } void -register_seed(void) +init_seed(void) { attrib * a; resource_limit * rdata; @@ -82,7 +82,7 @@ limit_mallornseeds(const region * r, const resource_type * rtype) } void -register_mallornseed(void) +init_mallornseed(void) { attrib * a; resource_limit * rdata; diff --git a/src/common/items/seed.h b/src/common/items/seed.h index 27b00c112..85bd4fd09 100644 --- a/src/common/items/seed.h +++ b/src/common/items/seed.h @@ -20,10 +20,10 @@ extern "C" { extern struct resource_type * rt_seed; -extern void register_seed(void); +extern void init_seed(void); extern struct resource_type * rt_mallornseed; -extern void register_mallornseed(void); +extern void init_mallornseed(void); #ifdef __cplusplus } diff --git a/src/common/items/weapons.c b/src/common/items/weapons.c index 4a767f74d..45f3b91e9 100644 --- a/src/common/items/weapons.c +++ b/src/common/items/weapons.c @@ -276,7 +276,8 @@ init_oldweapons(void) } void -register_weapons(void) { +register_weapons(void) +{ register_function((pf_generic)attack_catapult, "attack_catapult"); register_function((pf_generic)attack_firesword, "attack_firesword"); } diff --git a/src/common/items/xerewards.c b/src/common/items/xerewards.c index f779e33d9..9924a5d39 100644 --- a/src/common/items/xerewards.c +++ b/src/common/items/xerewards.c @@ -82,7 +82,7 @@ use_manacrystal(struct unit * u, const struct item_type * itype, int amount, str void register_xerewards(void) { - register_function((pf_generic)use_skillpotion, "useskillpotion"); - register_function((pf_generic)use_manacrystal, "usemanacrystal"); + register_function((pf_generic)use_skillpotion, "use_skillpotion"); + register_function((pf_generic)use_manacrystal, "use_manacrystal"); } diff --git a/src/common/kernel/item.c b/src/common/kernel/item.c index c3fbf0a26..ef6fe2b20 100644 --- a/src/common/kernel/item.c +++ b/src/common/kernel/item.c @@ -1128,6 +1128,7 @@ init_olditems(void) switch (itemdata[i].typ) { case IS_LUXURY: price = itemdata[i].preis; + rtype->ltype = new_luxurytype(itype, price); break; case IS_RESOURCE: rtype->flags |= RTF_LIMITED; diff --git a/src/common/kernel/xmlreader.c b/src/common/kernel/xmlreader.c index 4168fc575..f6d984990 100644 --- a/src/common/kernel/xmlreader.c +++ b/src/common/kernel/xmlreader.c @@ -579,6 +579,13 @@ xml_readpotion(xmlXPathContextPtr xpath, item_type * itype) return new_potiontype(itype, level); } +static luxury_type * +xml_readluxury(xmlXPathContextPtr xpath, item_type * itype) +{ + int price = xml_ivalue(xpath->node, "price", 0); + return new_luxurytype(itype, price); +} + static armor_type * xml_readarmor(xmlXPathContextPtr xpath, item_type * itype) @@ -774,6 +781,17 @@ xml_readitem(xmlXPathContextPtr xpath, resource_type * rtype) } xmlXPathFreeObject(result); + /* reading item/luxury */ + xpath->node = node; + result = xmlXPathEvalExpression(BAD_CAST "luxury", xpath); + assert(result->nodesetval->nodeNr<=1); + if (result->nodesetval->nodeNr!=0) { + itype->flags |= ITF_LUXURY; + xpath->node = result->nodesetval->nodeTab[0]; + rtype->ltype = xml_readluxury(xpath, itype); + } + xmlXPathFreeObject(result); + /* reading item/armor */ xpath->node = node; result = xmlXPathEvalExpression(BAD_CAST "armor", xpath); diff --git a/src/eressea/server.cpp b/src/eressea/server.cpp index df6e1c2e0..3b049aa52 100644 --- a/src/eressea/server.cpp +++ b/src/eressea/server.cpp @@ -224,6 +224,7 @@ game_init(void) register_wormholes(); #endif + register_itemtypes(); register_xmlreader(); enable_xml_gamecode(); init_data(xmlfile); diff --git a/src/res/resources.xml b/src/res/resources.xml index 951dda6b5..61432e6ef 100644 --- a/src/res/resources.xml +++ b/src/res/resources.xml @@ -1,25 +1,18 @@ - - - - - - - - + - +