forked from github/server
translate seed_%race% equipment from xml to lua.
This commit is contained in:
parent
298e220cfd
commit
40125bb75e
|
@ -1,73 +1,6 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<eressea><equipment>
|
<eressea><equipment>
|
||||||
|
|
||||||
<!-- one equipment-set per player-race for the first unit in a faction -->
|
|
||||||
<set name="seed_dwarf">
|
|
||||||
<item name="axe" amount="1"/>
|
|
||||||
<item name="chainmail" amount="1"/>
|
|
||||||
<skill name="melee" level="1"/>
|
|
||||||
</set>
|
|
||||||
|
|
||||||
<set name="seed_elf">
|
|
||||||
<item name="fairyboot" amount="1"/>
|
|
||||||
<callback name="equip_newunits"/>
|
|
||||||
</set>
|
|
||||||
|
|
||||||
<set name="seed_orc">
|
|
||||||
<skill name="polearm" level="4"/>
|
|
||||||
<skill name="melee" level="4"/>
|
|
||||||
<skill name="crossbow" level="4"/>
|
|
||||||
<skill name="catapult" level="4"/>
|
|
||||||
<skill name="bow" level="4"/>
|
|
||||||
</set>
|
|
||||||
|
|
||||||
<set name="seed_goblin">
|
|
||||||
<item name="roi" amount="1"/>
|
|
||||||
<callback name="equip_newunits"/>
|
|
||||||
</set>
|
|
||||||
|
|
||||||
<set name="seed_human">
|
|
||||||
<callback name="equip_newunits"/>
|
|
||||||
</set>
|
|
||||||
|
|
||||||
<set name="seed_troll">
|
|
||||||
<skill name="building" level="1"/>
|
|
||||||
<skill name="perception" level="3"/>
|
|
||||||
<item name="stone" amount="50"/>
|
|
||||||
</set>
|
|
||||||
|
|
||||||
<set name="seed_demon">
|
|
||||||
<skill name="stamina" level="15"/>
|
|
||||||
</set>
|
|
||||||
|
|
||||||
<set name="seed_insect">
|
|
||||||
<item name="nestwarmth" amount="9"/>
|
|
||||||
</set>
|
|
||||||
|
|
||||||
<set name="seed_halfling">
|
|
||||||
<skill name="trade" level="1"/>
|
|
||||||
<skill name="riding" level="2"/>
|
|
||||||
<item name="horse" amount="2"/>
|
|
||||||
<item name="cart" amount="1"/>
|
|
||||||
<item name="balm" amount="5"/>
|
|
||||||
<item name="spice" amount="5"/>
|
|
||||||
<item name="myrrh" amount="5"/>
|
|
||||||
<item name="jewel" amount="5"/>
|
|
||||||
<item name="oil" amount="5"/>
|
|
||||||
<item name="silk" amount="5"/>
|
|
||||||
<item name="incense" amount="5"/>
|
|
||||||
</set>
|
|
||||||
|
|
||||||
<set name="seed_cat">
|
|
||||||
<item name="roi" amount="1"/>
|
|
||||||
<callback name="equip_newunits"/>
|
|
||||||
</set>
|
|
||||||
|
|
||||||
<set name="seed_aquarian">
|
|
||||||
<skill name="sailing" level="1"/>
|
|
||||||
<callback name="equip_newunits"/>
|
|
||||||
</set>
|
|
||||||
|
|
||||||
<!-- equipment-sets for random encounters -->
|
<!-- equipment-sets for random encounters -->
|
||||||
<set name="rand_desert">
|
<set name="rand_desert">
|
||||||
<skill name="melee" level="d2"/>
|
<skill name="melee" level="d2"/>
|
||||||
|
|
|
@ -24,24 +24,115 @@ local sets = {
|
||||||
['perception'] = 30,
|
['perception'] = 30,
|
||||||
['melee'] = 1
|
['melee'] = 1
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
['seed_dwarf'] = {
|
||||||
|
['items'] = {
|
||||||
|
['axe'] = 1,
|
||||||
|
['chainmail'] = 1,
|
||||||
|
},
|
||||||
|
['skills'] = {
|
||||||
|
['melee'] = 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
['seed_elf'] = {
|
||||||
|
['items'] = {
|
||||||
|
['fairyboot'] = 1,
|
||||||
|
},
|
||||||
|
['callback'] = equip_newunits
|
||||||
|
},
|
||||||
|
['seed_orc'] = {
|
||||||
|
['skills'] = {
|
||||||
|
['polearm'] = 4,
|
||||||
|
['melee'] = 4,
|
||||||
|
['crossbow'] = 4,
|
||||||
|
['catapult'] = 4,
|
||||||
|
['bow'] = 4,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
['seed_goblin'] = {
|
||||||
|
['items'] = {
|
||||||
|
['roi'] = 1
|
||||||
|
},
|
||||||
|
['callback'] = equip_newunits
|
||||||
|
},
|
||||||
|
['seed_human'] = {
|
||||||
|
['callback'] = equip_newunits
|
||||||
|
},
|
||||||
|
['seed_troll'] = {
|
||||||
|
['items'] = {
|
||||||
|
['stone'] = 50,
|
||||||
|
},
|
||||||
|
['skills'] = {
|
||||||
|
['building'] = 1,
|
||||||
|
['perception'] = 3,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
['seed_demon'] = {
|
||||||
|
['skills'] = {
|
||||||
|
['stamina'] = 15
|
||||||
|
}
|
||||||
|
},
|
||||||
|
['seed_insect'] = {
|
||||||
|
['items'] = {
|
||||||
|
['nestwarmth'] =9
|
||||||
|
}
|
||||||
|
},
|
||||||
|
['seed_halfling'] = {
|
||||||
|
['items'] = {
|
||||||
|
['horse'] = 2,
|
||||||
|
['cart'] = 1,
|
||||||
|
['balm'] = 5,
|
||||||
|
['spice'] = 5,
|
||||||
|
['myrrh'] = 5,
|
||||||
|
['jewel'] = 5,
|
||||||
|
['oil'] = 5,
|
||||||
|
['silk'] = 5,
|
||||||
|
['incense'] = 5
|
||||||
|
},
|
||||||
|
['skills'] = {
|
||||||
|
['trade'] = 1,
|
||||||
|
['riding'] = 2
|
||||||
|
}
|
||||||
|
},
|
||||||
|
['seed_cat'] = {
|
||||||
|
['items'] = {
|
||||||
|
['roi'] = 1
|
||||||
|
},
|
||||||
|
['callback'] = equip_newunits
|
||||||
|
},
|
||||||
|
['seed_aquarian'] = {
|
||||||
|
['skills'] = {
|
||||||
|
['sailing'] = 1
|
||||||
|
},
|
||||||
|
['callback'] = equip_newunits
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function equip_unit(u, name, flags)
|
function equip_unit(u, name, flags)
|
||||||
set = sets[name]
|
local set = sets[name]
|
||||||
if set then
|
if set then
|
||||||
items = set['items']
|
local items = set['items']
|
||||||
if items then
|
if items then
|
||||||
for k,v in pairs(items) do
|
for k,v in pairs(items) do
|
||||||
u:add_item(k, v)
|
u:add_item(k, v)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
skills = set['skills']
|
local skills = set['skills']
|
||||||
if skills then
|
if skills then
|
||||||
for k,v in pairs(skills) do
|
for k,v in pairs(skills) do
|
||||||
u:set_skill(k, v)
|
u:set_skill(k, v)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
local spells = set['spells']
|
||||||
|
if spells then
|
||||||
|
for k, v in ipairs(spells) do
|
||||||
|
u:add_spell(v)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local callback = set['callback']
|
||||||
|
if callback and type(callback) == 'function' then
|
||||||
|
callback(u)
|
||||||
|
end
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
return false
|
return false
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include "kernel/save.h"
|
#include "kernel/save.h"
|
||||||
#include "kernel/spell.h"
|
#include "kernel/spell.h"
|
||||||
#include "kernel/spellbook.h"
|
#include "kernel/spellbook.h"
|
||||||
|
#include "races/races.h"
|
||||||
|
|
||||||
#include "bind_unit.h"
|
#include "bind_unit.h"
|
||||||
#include "bind_storage.h"
|
#include "bind_storage.h"
|
||||||
|
@ -845,8 +846,13 @@ static int init_data(const char *filename)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int tolua_equip_newunits(lua_State * L) {
|
||||||
|
unit *u = (unit *)tolua_tousertype(L, 1, 0);
|
||||||
|
equip_newunits(u);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int tolua_read_xml(lua_State * L)
|
static int tolua_read_xml(lua_State * L)
|
||||||
{
|
{
|
||||||
const char *filename = tolua_tostring(L, 1, "config.xml");
|
const char *filename = tolua_tostring(L, 1, "config.xml");
|
||||||
lua_pushinteger(L, init_data(filename));
|
lua_pushinteger(L, init_data(filename));
|
||||||
|
@ -1023,6 +1029,7 @@ int tolua_bindings_open(lua_State * L, const dictionary *inifile)
|
||||||
tolua_function(L, TOLUA_CAST "translate", &tolua_translate);
|
tolua_function(L, TOLUA_CAST "translate", &tolua_translate);
|
||||||
tolua_function(L, TOLUA_CAST "spells", tolua_get_spells);
|
tolua_function(L, TOLUA_CAST "spells", tolua_get_spells);
|
||||||
tolua_function(L, TOLUA_CAST "read_xml", tolua_read_xml);
|
tolua_function(L, TOLUA_CAST "read_xml", tolua_read_xml);
|
||||||
|
tolua_function(L, TOLUA_CAST "equip_newunits", tolua_equip_newunits);
|
||||||
} tolua_endmodule(L);
|
} tolua_endmodule(L);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
#include "races.h"
|
#include "races.h"
|
||||||
|
|
||||||
#include <kernel/building.h>
|
#include <kernel/building.h>
|
||||||
#include <kernel/equipment.h>
|
|
||||||
#include <kernel/faction.h>
|
#include <kernel/faction.h>
|
||||||
#include <kernel/item.h>
|
#include <kernel/item.h>
|
||||||
#include <kernel/pathfinder.h>
|
#include <kernel/pathfinder.h>
|
||||||
|
@ -36,7 +35,7 @@ void age_skeleton(struct unit *u);
|
||||||
void age_zombie(struct unit *u);
|
void age_zombie(struct unit *u);
|
||||||
void age_ghoul(struct unit *u);
|
void age_ghoul(struct unit *u);
|
||||||
|
|
||||||
static void equip_newunits(const struct equipment *eq, struct unit *u)
|
void equip_newunits(struct unit *u)
|
||||||
{
|
{
|
||||||
struct region *r = u->region;
|
struct region *r = u->region;
|
||||||
const struct resource_type *rtype;
|
const struct resource_type *rtype;
|
||||||
|
@ -81,8 +80,6 @@ static void equip_newunits(const struct equipment *eq, struct unit *u)
|
||||||
* in die jeweilige Rassendefiniton eingebunden */
|
* in die jeweilige Rassendefiniton eingebunden */
|
||||||
void register_races(void)
|
void register_races(void)
|
||||||
{
|
{
|
||||||
register_function((pf_generic)equip_newunits, "equip_newunits");
|
|
||||||
|
|
||||||
/* function age for race->age() */
|
/* function age for race->age() */
|
||||||
register_function((pf_generic)age_undead, "age_undead");
|
register_function((pf_generic)age_undead, "age_undead");
|
||||||
register_function((pf_generic)age_skeleton, "age_skeleton");
|
register_function((pf_generic)age_skeleton, "age_skeleton");
|
||||||
|
|
|
@ -18,6 +18,7 @@ extern "C" {
|
||||||
|
|
||||||
void register_races(void);
|
void register_races(void);
|
||||||
void make_undead_unit(struct unit *);
|
void make_undead_unit(struct unit *);
|
||||||
|
void equip_newunits(struct unit *u);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -862,27 +862,6 @@ static void add_items(equipment * eq, xmlNodeSetPtr nsetItems)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void add_callbacks(equipment * eq, xmlNodeSetPtr nsetItems)
|
|
||||||
{
|
|
||||||
if (nsetItems != NULL && nsetItems->nodeNr > 0) {
|
|
||||||
int i;
|
|
||||||
for (i = 0; i != nsetItems->nodeNr; ++i) {
|
|
||||||
xmlNodePtr node = nsetItems->nodeTab[i];
|
|
||||||
xmlChar *propValue;
|
|
||||||
pf_generic fun;
|
|
||||||
|
|
||||||
propValue = xmlGetProp(node, BAD_CAST "name");
|
|
||||||
if (propValue != NULL) {
|
|
||||||
fun = get_function((const char *)propValue);
|
|
||||||
if (fun) {
|
|
||||||
equipment_setcallback(eq, (equip_callback_fun)fun);
|
|
||||||
}
|
|
||||||
xmlFree(propValue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void add_spells(equipment * eq, xmlNodeSetPtr nsetItems)
|
static void add_spells(equipment * eq, xmlNodeSetPtr nsetItems)
|
||||||
{
|
{
|
||||||
if (nsetItems != NULL && nsetItems->nodeNr > 0) {
|
if (nsetItems != NULL && nsetItems->nodeNr > 0) {
|
||||||
|
@ -1021,11 +1000,6 @@ static int parse_equipment(xmlDocPtr doc)
|
||||||
|
|
||||||
xpath->node = node;
|
xpath->node = node;
|
||||||
|
|
||||||
xpathResult = xmlXPathEvalExpression(BAD_CAST "callback", xpath);
|
|
||||||
assert(!eq->callback);
|
|
||||||
add_callbacks(eq, xpathResult->nodesetval);
|
|
||||||
xmlXPathFreeObject(xpathResult);
|
|
||||||
|
|
||||||
xpathResult = xmlXPathEvalExpression(BAD_CAST "item", xpath);
|
xpathResult = xmlXPathEvalExpression(BAD_CAST "item", xpath);
|
||||||
assert(!eq->items);
|
assert(!eq->items);
|
||||||
add_items(eq, xpathResult->nodesetval);
|
add_items(eq, xpathResult->nodesetval);
|
||||||
|
|
Loading…
Reference in New Issue