From 0e0f37d9709c7143ece070321f19c0d254da6322 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Wed, 26 Oct 2005 19:02:45 +0000 Subject: [PATCH] bugfix seed-registrierung --- src/common/gamecode/items.c | 2 +- src/common/gamecode/items.h | 3 +-- src/common/items/itemtypes.c | 17 ++++++----------- src/common/items/itemtypes.h | 1 - src/eressea/lua/spell.cpp | 31 +++++++++++++++++++++++++++++++ src/eressea/main.c | 3 +-- src/eressea/server.cpp | 3 +-- src/mapper/mapper.c | 1 - 8 files changed, 41 insertions(+), 20 deletions(-) diff --git a/src/common/gamecode/items.c b/src/common/gamecode/items.c index c2691f920..1f75c748a 100644 --- a/src/common/gamecode/items.c +++ b/src/common/gamecode/items.c @@ -258,7 +258,7 @@ use_aurapotion50(struct unit * u, const struct item_type * itype, void -register_itemimplementations(void) +register_itemfunctions(void) { register_function((pf_generic)use_antimagiccrystal, "use_antimagiccrystal"); register_function((pf_generic)use_instantartsculpture, "use_instantartsculpture"); diff --git a/src/common/gamecode/items.h b/src/common/gamecode/items.h index 2b401499b..36edff141 100644 --- a/src/common/gamecode/items.h +++ b/src/common/gamecode/items.h @@ -16,8 +16,7 @@ without prior permission by the authors of Eressea. extern "C" { #endif - extern void register_itemimplementations(void); - extern void init_itemimplementations(void); + extern void register_itemfunctions(void); #ifdef __cplusplus } diff --git a/src/common/items/itemtypes.c b/src/common/items/itemtypes.c index e15514e69..cde4ca826 100644 --- a/src/common/items/itemtypes.c +++ b/src/common/items/itemtypes.c @@ -20,19 +20,14 @@ #include "weapons.h" #include "seed.h" -void -register_itemtypes(void) -{ - register_weapons(); - register_demonseye(); - register_xerewards(); - register_seed(); - register_mallornseed(); - register_artrewards(); -} - void init_itemtypes(void) { + register_weapons(); + register_demonseye(); + register_xerewards(); + register_artrewards(); init_weapons(); + register_seed(); + register_mallornseed(); } diff --git a/src/common/items/itemtypes.h b/src/common/items/itemtypes.h index a5237e77e..4dd3a067b 100644 --- a/src/common/items/itemtypes.h +++ b/src/common/items/itemtypes.h @@ -16,7 +16,6 @@ extern "C" { #endif -extern void register_itemtypes(void); extern void init_itemtypes(void); #ifdef __cplusplus diff --git a/src/eressea/lua/spell.cpp b/src/eressea/lua/spell.cpp index a1982bc5d..2b8a9fb93 100644 --- a/src/eressea/lua/spell.cpp +++ b/src/eressea/lua/spell.cpp @@ -83,6 +83,36 @@ init_familiar(unit * u) equip_unit(u, get_equipment(fname)); } +static int +use_item(struct unit * u, const struct item_type * itype, int amount, struct order * ord) +{ + int retval = 0; + char fname[64]; + snprintf(fname, sizeof(fname), "use_%s", itype->rtype->_name[0]); + + luabind::object globals = luabind::get_globals(luaState); + luabind::object fun = globals.at(fname); + if (fun.is_valid()) { + if (fun.type()!=LUA_TFUNCTION) { + log_warning(("Lua global object %s is not a function, type is %u\n", fname, fun.type())); + } else { + try { + retval = luabind::call_function(luaState, fname, u, amount); + } + catch (luabind::error& e) { + lua_State* L = e.state(); + const char* error = lua_tostring(L, -1); + log_error(("An exception occured while %s tried to call '%s': %s.\n", + unitname(u), fname, error)); + lua_pop(L, 1); + std::terminate(); + } + } + } + return retval; +} + + void bind_spell(lua_State * L) { @@ -95,4 +125,5 @@ bind_spell(lua_State * L) ]; register_function((pf_generic)&call_spell, "luaspell"); register_function((pf_generic)&init_familiar, "luafamiliar"); + register_function((pf_generic)&use_item, "luaitem"); } diff --git a/src/eressea/main.c b/src/eressea/main.c index df8312ed2..d2a1f7206 100644 --- a/src/eressea/main.c +++ b/src/eressea/main.c @@ -156,8 +156,7 @@ game_init(void) register_resources(); register_buildings(); register_ships(); - register_itemimplementations(); - register_itemtypes(); + register_itemfunctions(); register_spells(); #ifdef DUNGEON_MODULE register_dungeon(); diff --git a/src/eressea/server.cpp b/src/eressea/server.cpp index 3b7cf1e24..f42331cb6 100644 --- a/src/eressea/server.cpp +++ b/src/eressea/server.cpp @@ -209,8 +209,7 @@ game_init(void) register_resources(); register_buildings(); register_ships(); - register_itemimplementations(); - register_itemtypes(); + register_itemfunctions(); register_spells(); #ifdef DUNGEON_MODULE register_dungeon(); diff --git a/src/mapper/mapper.c b/src/mapper/mapper.c index 8e2ead172..d99b1c6bf 100644 --- a/src/mapper/mapper.c +++ b/src/mapper/mapper.c @@ -1643,7 +1643,6 @@ main(int argc, char *argv[]) register_resources(); register_buildings(); register_ships(); - register_itemtypes(); register_spells(); #ifdef MUSEUM_MODULE register_museum();