forked from github/server
eliminate terrain parsing from xmlreader.c, it's all in JSON now!
This commit is contained in:
parent
23b19d3dfa
commit
bd51ac7dd7
|
@ -1883,131 +1883,6 @@ static int parse_races(xmlDocPtr doc)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int parse_terrains(xmlDocPtr doc)
|
||||
{
|
||||
xmlXPathContextPtr xpath;
|
||||
xmlXPathObjectPtr terrains;
|
||||
xmlNodeSetPtr nodes;
|
||||
int i;
|
||||
|
||||
xpath = xmlXPathNewContext(doc);
|
||||
|
||||
/* reading eressea/terrains/terrain */
|
||||
terrains =
|
||||
xmlXPathEvalExpression(BAD_CAST "/eressea/terrains/terrain", xpath);
|
||||
nodes = terrains->nodesetval;
|
||||
for (i = 0; i != nodes->nodeNr; ++i) {
|
||||
xmlNodePtr node = nodes->nodeTab[i];
|
||||
terrain_type *terrain;
|
||||
xmlChar *propValue;
|
||||
xmlXPathObjectPtr xpathChildren;
|
||||
xmlNodeSetPtr children;
|
||||
|
||||
propValue = xmlGetProp(node, BAD_CAST "name");
|
||||
assert(propValue != NULL);
|
||||
terrain = get_or_create_terrain((const char *)propValue);
|
||||
xmlFree(propValue);
|
||||
|
||||
terrain->max_road = (short)xml_ivalue(node, "road", 0);
|
||||
assert(terrain->max_road >= 0);
|
||||
terrain->size = xml_ivalue(node, "size", 0);
|
||||
|
||||
if (xml_bvalue(node, "forbidden", false))
|
||||
terrain->flags |= FORBIDDEN_REGION;
|
||||
else {
|
||||
if (xml_bvalue(node, "fly", true))
|
||||
terrain->flags |= FLY_INTO;
|
||||
if (xml_bvalue(node, "sail", true))
|
||||
terrain->flags |= SAIL_INTO;
|
||||
if (xml_bvalue(node, "walk", true))
|
||||
terrain->flags |= WALK_INTO;
|
||||
if (xml_bvalue(node, "swim", false))
|
||||
terrain->flags |= SWIM_INTO;
|
||||
if (xml_bvalue(node, "cavalry", false))
|
||||
terrain->flags |= CAVALRY_REGION;
|
||||
}
|
||||
if (xml_bvalue(node, "sea", false))
|
||||
terrain->flags |= SEA_REGION;
|
||||
if (xml_bvalue(node, "arctic", false))
|
||||
terrain->flags |= ARCTIC_REGION;
|
||||
if (xml_bvalue(node, "land", true))
|
||||
terrain->flags |= LAND_REGION;
|
||||
if (xml_bvalue(node, "forest", false))
|
||||
terrain->flags |= FOREST_REGION;
|
||||
|
||||
terrain->distribution = (short)xml_ivalue(node, "seed", 0);
|
||||
|
||||
xpath->node = node;
|
||||
xpathChildren = xmlXPathEvalExpression(BAD_CAST "herb", xpath);
|
||||
children = xpathChildren->nodesetval;
|
||||
if (children->nodeNr > 0) {
|
||||
int k;
|
||||
|
||||
terrain->herbs = malloc((children->nodeNr + 1) * sizeof(item_type *));
|
||||
terrain->herbs[children->nodeNr] = NULL;
|
||||
for (k = 0; k != children->nodeNr; ++k) {
|
||||
xmlNodePtr nodeHerb = children->nodeTab[k];
|
||||
const struct resource_type *rtype;
|
||||
|
||||
propValue = xmlGetProp(nodeHerb, BAD_CAST "name");
|
||||
assert(propValue != NULL);
|
||||
rtype = rt_find((const char *)propValue);
|
||||
assert(rtype != NULL && rtype->itype != NULL
|
||||
&& fval(rtype->itype, ITF_HERB));
|
||||
terrain->herbs[k] = rtype->itype;
|
||||
xmlFree(propValue);
|
||||
}
|
||||
}
|
||||
xmlXPathFreeObject(xpathChildren);
|
||||
|
||||
xpath->node = node;
|
||||
xpathChildren = xmlXPathEvalExpression(BAD_CAST "resource", xpath);
|
||||
children = xpathChildren->nodesetval;
|
||||
if (children->nodeNr > 0) {
|
||||
int k;
|
||||
|
||||
terrain->production =
|
||||
malloc((children->nodeNr + 1) * sizeof(terrain_production));
|
||||
terrain->production[children->nodeNr].type = NULL;
|
||||
for (k = 0; k != children->nodeNr; ++k) {
|
||||
xmlNodePtr nodeProd = children->nodeTab[k];
|
||||
|
||||
propValue = xmlGetProp(nodeProd, BAD_CAST "name");
|
||||
assert(propValue != NULL);
|
||||
terrain->production[k].type = rt_find((const char *)propValue);
|
||||
assert(terrain->production[k].type);
|
||||
xmlFree(propValue);
|
||||
|
||||
propValue = xmlGetProp(nodeProd, BAD_CAST "level");
|
||||
assert(propValue);
|
||||
terrain->production[k].startlevel = _strdup((const char *)propValue);
|
||||
xmlFree(propValue);
|
||||
|
||||
propValue = xmlGetProp(nodeProd, BAD_CAST "base");
|
||||
assert(propValue);
|
||||
terrain->production[k].base = _strdup((const char *)propValue);
|
||||
xmlFree(propValue);
|
||||
|
||||
propValue = xmlGetProp(nodeProd, BAD_CAST "div");
|
||||
assert(propValue);
|
||||
terrain->production[k].divisor = _strdup((const char *)propValue);
|
||||
xmlFree(propValue);
|
||||
|
||||
terrain->production[k].chance =
|
||||
(float)xml_fvalue(nodeProd, "chance", 1.0);
|
||||
}
|
||||
}
|
||||
xmlXPathFreeObject(xpathChildren);
|
||||
|
||||
}
|
||||
xmlXPathFreeObject(terrains);
|
||||
|
||||
xmlXPathFreeContext(xpath);
|
||||
|
||||
init_terrains();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int parse_messages(xmlDocPtr doc)
|
||||
{
|
||||
xmlXPathContextPtr xpath;
|
||||
|
@ -2287,7 +2162,6 @@ void register_xmlreader(void)
|
|||
xml_register_callback(parse_resources);
|
||||
xml_register_callback(parse_rules);
|
||||
|
||||
xml_register_callback(parse_terrains); /* requires resources */
|
||||
xml_register_callback(parse_buildings); /* requires resources */
|
||||
xml_register_callback(parse_ships); /* requires terrains */
|
||||
xml_register_callback(parse_spells); /* requires resources */
|
||||
|
|
Loading…
Reference in New Issue